MYSQL Limit Вхождения конкретного значения столбца - PullRequest
3 голосов
/ 12 июля 2011

Извлечение некоторых купонов из базы данных. Каждый купон имеет столбец merchantid, содержащий идентификатор продавца, которому также принадлежит купон.

Я пытаюсь создать запрос, который получает 5 купонов, но мне нужен только 1 купон на merchantid. Я не хочу несколько купонов с одинаковым merchantid.

Ответы [ 2 ]

3 голосов
/ 12 июля 2011

Вы можете использовать

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.

1 голос
/ 12 июля 2011

1001 * попробовать *

SELECT * FROM your_table_name GROUP BY merchantid LIMIT 0,5; 

это даст 5 строк с разными торговцами, но вы можете получить один и тот же результат для разных исполнений. если вы хотите рандомизировать его, рандомизируйте 'A' внутри 'LIMIT A,5'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...