SQL - 每个访问者访问工具的次数

时间:2013-03-06 21:19:28

标签: mysql sql select

我们有一个MySql表,我们在其中记录每个访问者访问应用程序的日期。因此,在任何时间点,表格可能如下所示:

| Tool   | Email                | Date     |
|--------+----------------------+----------|
| Tool 1 | boy1@gmail.com       | 03/03/13 |
| Tool 1 | boy2@gmail.com       | 03/05/13 |
| Tool 9 | anotherboy@yahoo.com | 09/01/13 |
| Tool 1 | boy1@gmail.com       | 10/07/12 |
| Tool 2 | boy1@gmail.com       | 01/01/10 |
| Tool 5 | boy2@gmail.com       | 05/04/12 |
| Tool 1 | boy1@gmail.com       | 05/10/13 |
| Tool 1 | boy2@gmail.com       | 09/10/12 |
| Tool 9 | anotherboy@yahoo.com | 10/07/13 |

我们希望能够获得每个访问者(通过电子邮件ID标识)访问过工具的次数。因此,对于上表,我们希望能够实现的目标是:

| Tool   | Email                | Number of Visits |
|--------+----------------------+------------------|
| Tool 1 | boy1@gmail.com       |                3 |
| Tool 1 | boy2@gmail.com       |                2 |
| Tool 9 | anotherboy@yahoo.com |                2 |
| Tool 2 | boy1@gmail.com       |                1 |
| Tool 5 | boy2@gmail.com       |                1 |

我曾尝试在电子邮件列中使用group by子句,但这给了我不同的电子邮件ID,这不是我想要的。我真正希望能够做的是选择不同的工具 - 电子邮件对并计算它们在表格中的出现次数。实现这一目标的最佳方法是什么?我应该看看加入吗?

会欣赏正确方向的任何指示。

2 个答案:

答案 0 :(得分:3)

这可能就是你所需要的吗?

SELECT Tool, Email, COUNT(*)
FROM tbl
GROUP BY Tool, Email
ORDER BY COUNT(*) DESC

<强>结果

|   TOOL |                EMAIL | COUNT(*) |
--------------------------------------------
| Tool 1 |       boy1@gmail.com |        3 |
| Tool 1 |       boy2@gmail.com |        2 |
| Tool 9 | anotherboy@yahoo.com |        2 |
| Tool 5 |       boy2@gmail.com |        1 |
| Tool 2 |       boy1@gmail.com |        1 |

See the demo

答案 1 :(得分:2)

您需要GROUP BY声明。

SELECT Tool, COUNT(*), Email
FROM table
GROUP BY Tool, Email