2010-03-30 82 views
4

我有這樣一個表:是否可以在MySQL中對兩行進行分組?

someid somestring 
1   Hello 
1   World 
1   Blah 
2   World 
2   TestA 
2   TestB 
... 

目前,我通過ID分組和連接字符串,所以我結束了這一點:

1   Hello,World,Blah 
2   World,TestA,TestB 
... 

是否有可能做第二分組,以便如果有多個條目以相同的字符串結尾,我可以將它們分組?

+0

你目前的查詢? – 2010-03-30 00:15:16

回答

7

是的,只需將您當前的查詢放在內部選擇中並將新的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'); 
+0

一般子查詢的效率如何?這裏總是有關於「我怎樣才能使這個查詢/取消嵌套查詢」等問題,這意味着嵌套查詢在某種程度上是不好的。 – DisgruntledGoat 2010-03-30 00:19:26

+0

如果優化器未找到將其作爲JOIN執行的相關子查詢(其中您的內部查詢引用外部查詢)可能會非常緩慢,而是會對外部查詢的每行執行一次內部查詢。但這不是一個相關的子查詢,所以沒有問題。 – 2010-03-30 00:21:23

+0

請記住,GROUP_CONCAT()的長度是有限的,默認情況下一般爲1,024字節。如果內部查詢具有「較大」結果集,此答案可能會中斷。你可以通過'show group_concat%'等顯示變量來獲得當前的限制 – 2010-03-30 19:21:06

相關問題