Можно ли применить ограничение на размер группы? - PullRequest
1 голос
/ 16 сентября 2011
select * from tabName limit 25

по вышеуказанному запросу я получаю 25 строк и хочу добавить ограничение в этом результате для 5 записей на группу.

Возможно ли это?

1 Ответ

2 голосов
/ 16 сентября 2011

См. Мой ответ на Как ВЫБРАТЬ четыре новейших элемента в категории? для стандартного решения. Этот вопрос регулярно возникает в StackOverflow, и мы пытаемся пометить его greatest-n-per-group. Но в большинстве случаев люди спрашивают о величине 1 на группу, для которой используются разные решения.

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

Для решения, не заботящегося о порядке, в MySQL нет оконных функций ANSI SQL: 2003, поэтому решение этой проблемы немного затруднительно. Но вы можете сделать это с помощью некоторых пользовательских трюков:

SET @g := NULL;
SET @n := 0;

SELECT * FROM (
  SELECT IF(groupCol = @g, @n:=@n+1, @n:=1) AS n, @g:=groupCol AS groupCol, *
  FROM tabName
  -- put ORDER BY here if applicable
) AS t
WHERE n <= 5;

Замените 5 любым другим пределом, который вы хотите наложить на строки в группе.

...