我有下表,我正在尝试计算每个用户执行的操作数量。
----------------------------------
| 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
有什么想法吗?
答案 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)
您可以做的一件事是按User
和Action
分组:
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的答案就是这样做并将计数作为列返回。