私がテーブルを持っているとしましょう:
ij --- a 1 a 2 a 3 a 4 b 5 b 6 b 7 b 8 b 9
明らかSELECT a, GROUP_CONCAT(b SEPARATOR ',') GROUP BY aに私に与えるだろう
1,2,3,4 b 5,6,7,8,9
しかし、たとえば2のように、限られた数の結果のみを取得したい場合はどうなりますか。
1,2 b 5,6
何か案は?
私がテーブルを持っているとしましょう:
ij --- a 1 a 2 a 3 a 4 b 5 b 6 b 7 b 8 b 9
明らかSELECT a, GROUP_CONCAT(b SEPARATOR ',') GROUP BY aに私に与えるだろう
1,2,3,4 b 5,6,7,8,9
しかし、たとえば2のように、限られた数の結果のみを取得したい場合はどうなりますか。
1,2 b 5,6
何か案は?
最良の方法は、SUBSTRING_INDEX()andを使用することGROUP_CONCAT()です。
SELECT i, SUBSTRING_INDEX( GROUP_CONCAT(j), ',', 2)
FROM mytable
GROUP BY i;
jここではフィールドの長さを知る必要はありません。
1 つの解決策は、集計を計算する前に、グループ内の行を上位 2 つに制限することです。
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;