2

我们有一个名为的表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 个条目的实例和 2 个条目的 1 个实例:

+---------------+-------+
| times_entered | total |
+---------------+-------+
|             1 |     1 |
|             2 |     1 |
+---------------+-------+

我已经尝试了一些事情,但我能得到的最远的结果是计算每个电子邮件地址被找到的次数。似乎我需要从这里做的就是整理这些结果并对这些组执行另一个 COUNT 以获得总数,但我不确定我该怎么做。

4

3 回答 3

4

通常它可能是这样的

select times_entered, count(*) from 
( select count(*) times_entered from entries group by email )
group by times_entered

不确定它是否适用于 MySQL...

于 2013-09-06T06:21:03.410 回答
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 演示

数据集稍大的 SQL Fiddle 演示

于 2013-09-06T06:20:37.953 回答
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;
于 2013-09-06T06:41:52.187 回答