在单独的列中计算多个条件 - MySQL

时间:2011-11-30 22:58:22

标签: mysql sql count

我有下表,我正在尝试计算每个用户执行的操作数量。

----------------------------------
| ID | User         | Action     | 
----------------------------------
| 1  | BobDoe       | View       |
| 2  | BobDoe       | Edit       |
| 3  | JaneDoe      | Comment    |
| 4  | BobDoe       | Comment    |
| 5  | JohnSmith    | Edit       |
| 6  | JaneDoe      | Edit       |
| 7  | JohnSmith    | Comment    |
| 8  | BobDoe       | View       |
----------------------------------

目前我使用以下查询来获取编辑的数量,但是我想要更改它以便计算注释和视图并将它们显示在自己的列中,我不知道我将如何计算它们各自分开而不必进行全新的查询。

SELECT Type, User, COUNT(*) AS Num FROM some_database GROUP BY User

有什么想法吗?

2 个答案:

答案 0 :(得分:9)

尝试在MySQL中有效的查询,因为TRUE相当于1而FALSE相当于0:

SELECT
    User, 
    COUNT(*) AS Num,
    SUM(Action = 'Comment') AS NumComments,
    SUM(Action = 'View') AS NumViews
FROM some_table
GROUP BY User

结果:

User       Num  NumComments  NumViews
-------------------------------------
BobDoe     4    1            2       
JaneDoe    2    1            0       
JohnSmith  2    1            0       

答案 1 :(得分:0)

您可以做的一件事是按UserAction分组:

SELECT *, COUNT(*) AS Num FROM some_database GROUP BY User, Action

这将返回如下结果:

----------------------------------------
| User         | Action     | Num | 
----------------------------------------
| BobDoe       | View       | 2   |
| BobDoe       | Edit       | 1   |
| JaneDoe      | Comment    | 1   |
| BobDoe       | Comment    | 1   |
| JohnSmith    | Edit       | 1   |
| JaneDoe      | Edit       | 1   |
| JohnSmith    | Comment    | 1   |
----------------------------------------

因此它不会在自己的列中提供结果,但它会将每个用户/操作组合的计数作为自己的行。

此解决方案的优点在于它可以扩展到任意数量的操作(编辑,查看,注释以及将来您想要的任何其他操作)。如果您不需要这种可扩展性,那么@Mark Byers的答案就是这样做并将计数作为列返回。