0

私がテーブルを持っているとしましょう:

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

何か案は?

4

2 に答える 2

1

最良の方法は、SUBSTRING_INDEX()andを使用することGROUP_CONCAT()です。

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

jここではフィールドの長さを知る必要はありません。

于 2013-07-08T12:56:41.740 に答える
0

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;
于 2008-11-16T01:14:14.120 に答える