См. Мой ответ на Как ВЫБРАТЬ четыре новейших элемента в категории? для стандартного решения. Этот вопрос регулярно возникает в 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
любым другим пределом, который вы хотите наложить на строки в группе.