Вы можете использовать
SELECT * FROM coupons GROUP BY merchantid LIMIT 0,5;
И это будет работать, потому что
MySQL расширяет использование GROUP BY, так что список выбора может ссылаться на неагрегированные столбцы, не указанные в предложении GROUP BY ( см. Документы )
Если вы не хотите, чтобы MySQL решал, какой merchantid
оставить, вы можете добавить свое условие
(в примере ниже - сохранить торговца с наибольшим количеством кликов), используя подзапрос:
ИСПРАВЛЕНО:
SELECT c1.*
FROM coupons c1 JOIN (
SELECT t.merchantid, MAX(t.numberofclicks) maxnumberofclicks
FROM coupons t GROUP BY t.merchantid
) c2 ON c1.merchantid = c2.merchantid AND c1.numberofclicks = c2.maxnumberofclicks
LIMIT 0,5;
И еще один (более краткий и, возможно, более быстрый способ работы с большими наборами данных) шкура кошки:
SELECT c1.*
FROM coupons c1 JOIN coupons c2 ON c1.merchantid = c2.merchantid
GROUP BY c1.merchantid, c1.numberofclicks
HAVING c1.numberofclicks = MAX(c2.numberofclicks)
LIMIT 0,5;
Если вы хотите получить 5 купонов с наибольшим количеством кликов, добавьте ORDER BY c1.numberofclicks DESC
перед LIMIT 0,5
.