计算另一个计数结果的出现次数

时间:2013-09-06 06:15:53

标签: mysql

我们有一个名为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来获得总数,但我不确定我该怎么做。

3 个答案:

答案 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

SQL Fiddle demo

SQL Fiddle demo with a slightly larger data set

答案 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;