开发者

MySQL query by count

开发者 https://www.devze.com 2023-01-26 02:35 出处:网络
I\'ve got a table that looks something like this: CREATE TABLE `mailer__opens` ( `id` int(10) unsigned NOT NULL auto_increment,

I've got a table that looks something like this:

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`)
)

I'm trying to build a query which returns only the results where the value in idSubscriber is repeated 5 or more times. (I hope I'm explaining this right).

EG, if the data in the table looked like this:

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       开发者_如何学C | 2010-04-01
11 | 00004        | 2010-05-06
12 | 00002        | 2010-05-08

I'd be interested in records 1, 3, 6, 8 and 10, because the idSubscriber 00001 has 5 or more records.

Can anyone provide me with a query that would do this? Thank you.


To list the idSubscriber that has repeated five of more times you can use:

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

To get the rows corresponding to such an idSubscriber you can use:

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


You must use GROUP BY with a HAVING clause:

SELECT id FROM mailer__opens GROUP BY idSubscriber HAVING COUNT(id) >= 5


First of all you need to get the different idSubscriber values:

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

For the given dataset, this will fetch only one value: 1

Then you need to select all rows where the idSubscriber is equal to those values. Therefore, your final query becomes:

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


SELECT id FROM mailer__opens WHERE idSubscriber IN (SELECT idSubscriber FROM mailer__opens GROUP BY idSubscriber HAVING COUNT(id) >= 5)
0

精彩评论

暂无评论...
验证码 换一张
取 消