Ограничение массива / ограничение group_concat в MySQL - PullRequest
0 голосов
/ 14 ноября 2008

Допустим, у меня есть таблица:

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 ]

1 голос
/ 08 июля 2013

Лучший способ - использовать SUBSTRING_INDEX() и GROUP_CONCAT().

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

Вам не нужно знать длину поля j здесь.

0 голосов
/ 16 ноября 2008

Одним из решений было бы ограничить строки в группе двумя верхними, прежде чем вычислять совокупность.

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;
...