2008-11-14 84 views
0

限制比方說,我有一個表:陣列切片/ GROUP_CONCAT在MySQL

 
i j 
--- 
a 1 
a 2 
a 3 
a 4 
b 5 
b 6 
b 7 
b 8 
b 9 

Obvoiusly SELECT a, GROUP_CONCAT(b SEPARATOR ',') GROUP BY a會給我

 
a 1,2,3,4 
b 5,6,7,8,9 

但是如果我想要得到結果僅有限數目的東西,例如2:

 
a 1,2 
b 5,6 

任何想法?

+0

你想獲得有限數量的結果或特定子集嗎?即你只需要兩個結果,還是你想要1,2和a,4,5? – 2008-11-14 17:52:44

回答

1

最好的辦法是使用SUBSTRING_INDEX()GROUP_CONCAT()

SELECT i, SUBSTRING_INDEX(GROUP_CONCAT(j), ',', 2) 
FROM mytable 
GROUP BY i; 

您不必在此知道j字段的長度。

0

一個解決方案是在計算聚合之前,將組中的行限制在前兩位。

SELECT t.i, GROUP_CONCAT(t.j) 
FROM 
    (SELECT t1.i, t1.j 
    FROM mytable AS t1 
    LEFT JOIN mytable AS t2 
     ON (t1.i = t2.i AND t1.j >= t2.j) 
    GROUP BY t1.i, t1.j 
    HAVING COUNT(*) <= 2) AS t 
GROUP BY t.i; 

另一種解決辦法,如果你知道在j值的長度是固定的,是簡單地在結果上使用SUBSTRING()

SELECT i, SUBSTRING(GROUP_CONCAT(j), 1, 3) 
FROM mytable 
GROUP BY i;