我们有一个名为entries
的表,它根据日期存储用户信息。允许用户每天进入一次数据库。一些示例数据:
+----+------------------+----------+
| id | email | date |
+----+------------------+----------+
| 1 | marty@domain.com | 04.09.13 |
| 2 | john@domain.com | 04.09.13 |
| 3 | marty@domain.com | 05.09.13 |
+----+------------------+----------+
我需要计算出数据库中有相同电子邮件的X
个条目的次数。例如,对于上面的数据,结果应如下所示,其中我们有1个实例的一个条目和1个实例的2个条目:
+---------------+-------+
| times_entered | total |
+---------------+-------+
| 1 | 1 |
| 2 | 1 |
+---------------+-------+
我尝试了一些东西,但我能够得到的最多的是得到每个电子邮件地址被找到的次数。看起来我需要做的就是整理这些结果并在这些组上执行另一个COUNT来获得总数,但我不确定我该怎么做。
答案 0 :(得分:4)
通常它可以是
select times_entered, count(*) from
( select count(*) times_entered from entries group by email )
group by times_entered
不确定它是否适用于MySQL ...
答案 1 :(得分:1)
以下内容将获取每封电子邮件的记录数:
SELECT COUNT(1) AS times_entered, email
FROM entries
GROUP BY email
因此,使用此查询作为派生表,我们可以按记录数进行分组以获取计数(我们不需要在子查询中选择email
列,因为我们不关心它):
SELECT times_entered, COUNT(1) AS total
FROM
(
SELECT COUNT(1) AS times_entered
FROM entries
GROUP BY email
) x
GROUP BY times_entered
答案 2 :(得分:0)
可能是这样的:
SELECT times_entered, COUNT( times_entered ) AS total
FROM (
SELECT COUNT( email ) AS times_entered
FROM `entries`
WHERE 1
GROUP BY email
) AS tmp
GROUP BY times_entered;