我有一张看起来像这样的表:
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
{{1有00001
个或更多记录。
任何人都可以向我提供一个可以执行此操作的查询吗?谢谢。
答案 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)