假设我有一张桌子:
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
有任何想法吗?
假设我有一张桌子:
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
有任何想法吗?
最好的方法是使用SUBSTRING_INDEX()
and GROUP_CONCAT()
。
SELECT i, SUBSTRING_INDEX( GROUP_CONCAT(j), ',', 2)
FROM mytable
GROUP BY i;
您不必知道j
这里的字段长度。
一种解决方案是在计算聚合之前将组中的行限制为前两行。
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;