MySQL按计数查询

时间:2010-11-19 10:55:21

标签: mysql group-by

我有一张看起来像这样的表:

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

我对记录136810感兴趣,因为idSubscriber {{1有00001个或更多记录。

任何人都可以向我提供一个可以执行此操作的查询吗?谢谢。

4 个答案:

答案 0 :(得分:3)

列出重复五次以上的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 )

答案 1 :(得分:2)

您必须将GROUP BY与HAVING子句一起使用:

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

答案 2 :(得分:0)

首先,您需要获取不同的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
)

答案 3 :(得分:0)

SELECT id FROM mailer__opens WHERE idSubscriber IN (SELECT idSubscriber FROM mailer__opens GROUP BY idSubscriber HAVING COUNT(id) >= 5)
相关问题