0

假设我有一张桌子:

ij
---
一个 1
a2
一个 3
一个 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

一种解决方案是在计算聚合之前将组中的行限制为前两行。

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 回答