我有這樣一個表:是否可以在MySQL中對兩行進行分組?
someid somestring
1 Hello
1 World
1 Blah
2 World
2 TestA
2 TestB
...
目前,我通過ID分組和連接字符串,所以我結束了這一點:
1 Hello,World,Blah
2 World,TestA,TestB
...
是否有可能做第二分組,以便如果有多個條目以相同的字符串結尾,我可以將它們分組?
我有這樣一個表:是否可以在MySQL中對兩行進行分組?
someid somestring
1 Hello
1 World
1 Blah
2 World
2 TestA
2 TestB
...
目前,我通過ID分組和連接字符串,所以我結束了這一點:
1 Hello,World,Blah
2 World,TestA,TestB
...
是否有可能做第二分組,以便如果有多個條目以相同的字符串結尾,我可以將它們分組?
是的,只需將您當前的查詢放在內部選擇中並將新的GROUP BY應用於外部選擇。請注意,您可能希望使用GROUP_CONCAT的ORDER BY來確保字符串始終以相同的順序連接。
SELECT somelist, COUNT(*) FROM
(
SELECT
someid,
GROUP_CONCAT(somestring ORDER BY somestring) AS somelist
FROM table1
GROUP BY someid
) AS T1
GROUP BY somelist
結果:
'Blah,Hello,World', 1
'TestA,TestB,World', 2
這是我使用的測試數據:
CREATE TABLE table1 (someid INT NOT NULL, somestring NVARCHAR(100) NOT NULL);
INSERT INTO table1 (someid, somestring) VALUES
(1, 'Hello'),
(1, 'World'),
(1, 'Blah'),
(2, 'World'),
(2, 'TestA'),
(2, 'TestB'),
(3, 'World'),
(3, 'TestB'),
(3, 'TestA');
一般子查詢的效率如何?這裏總是有關於「我怎樣才能使這個查詢/取消嵌套查詢」等問題,這意味着嵌套查詢在某種程度上是不好的。 – DisgruntledGoat 2010-03-30 00:19:26
如果優化器未找到將其作爲JOIN執行的相關子查詢(其中您的內部查詢引用外部查詢)可能會非常緩慢,而是會對外部查詢的每行執行一次內部查詢。但這不是一個相關的子查詢,所以沒有問題。 – 2010-03-30 00:21:23
請記住,GROUP_CONCAT()的長度是有限的,默認情況下一般爲1,024字節。如果內部查詢具有「較大」結果集,此答案可能會中斷。你可以通過'show group_concat%'等顯示變量來獲得當前的限制 – 2010-03-30 19:21:06
你目前的查詢? – 2010-03-30 00:15:16