MySQL запрос по количеству - PullRequest
2 голосов
/ 19 ноября 2010

У меня есть таблица, которая выглядит примерно так:

CREATE TABLE `mailer__opens` (
 `id` int(10) unsigned NOT NULL auto_increment,
 `idSubscriber` int(10) unsigned NOT NULL,
 `date` datetime NOT NULL,
 PRIMARY KEY  (`id`)
)

Я пытаюсь создать запрос, который возвращает только результаты, в которых значение в idSubscriber повторяется 5 илибольше раз.(Надеюсь, я объясняю это правильно).

EG, если бы данные в таблице выглядели так:

id | idSubscriber | date
------------------------------
1  | 00001        | 2010-01-01
2  | 00002        | 2010-01-02
3  | 00001        | 2010-01-05
4  | 00003        | 2010-01-26
5  | 00004        | 2010-02-14
6  | 00001        | 2010-02-28
7  | 00002        | 2010-03-05
8  | 00001        | 2010-03-06
9  | 00003        | 2010-03-10
10 | 00001        | 2010-04-01
11 | 00004        | 2010-05-06
12 | 00002        | 2010-05-08

Я бы заинтересовался записями 1, 3, 6, 8 и 10, поскольку idSubscriber 00001 имеет 5 или более записей.

Может ли кто-нибудь предоставить мне запрос, который бы это сделал?Спасибо.

Ответы [ 4 ]

3 голосов
/ 19 ноября 2010

Чтобы вывести список idSubscriber, который повторяется пять и более раз, вы можете использовать:

select idSubscriber 
from mailer__opens 
group by(idSubscriber) having count(*) >= 5;

Чтобы получить строки, соответствующие idSubscriber, вы можете использовать:

select * 
from mailer__opens 
where idSubscriber in 
  ( select idSubscriber 
    from mailer__opens 
    group by(idSubscriber) having count(*) >= 5 )
2 голосов
/ 19 ноября 2010

Вы должны использовать GROUP BY с предложением HAVING:

SELECT id FROM mailer__opens GROUP BY idSubscriber HAVING COUNT(id) >= 5
0 голосов
/ 19 ноября 2010
SELECT id FROM mailer__opens WHERE idSubscriber IN (SELECT idSubscriber FROM mailer__opens GROUP BY idSubscriber HAVING COUNT(id) >= 5)
0 голосов
/ 19 ноября 2010

Прежде всего вам нужно получить разные значения idSubscriber:

SELECT idSubscriber
FROM `mailer__opens` 
GROUP BY idSubscriber
HAVING count( * ) >=5

Для данного набора данных будет выбрано только одно значение: 1

Затем вам нужно выбрать все строкигде idSubscriber равен этим значениям.Таким образом, ваш последний запрос становится:

SELECT * 
FROM mailer__opens
WHERE idsubscriber
IN (
    SELECT idSubscriber
    FROM `mailer__opens` 
    GROUP BY idSubscriber
    HAVING count( * ) >=5
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...