MySQL中的数组切片/ group_concat限制

时间:2008-11-14 17:46:19

标签: mysql greatest-n-per-group

假设我有一张桌子:

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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

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

您无需知道j字段的长度。

答案 1 :(得分: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;