【发布时间】:2016-06-23 17:55:20
【问题描述】:
我有一个票务系统,我正在尝试对其进行报告。我正在尝试获取每个用户触及的票证数量。 使用第一个查询:
SELECT * FROM (
SELECT TicketID, UserID, EventDateTime
FROM dcscontact.ticketevents
WHERE EventDateTime BETWEEN '2016-06-22' AND '2016-06-23'
ORDER BY EventDateTime DESC) x
WHERE UserID=80
GROUP BY TicketID;
我能够列出为特定用户触摸的票证,并且可以手动计算它们:
TicketID UserID EventDateTime
99168 80 6/22/2016 13:21
99193 80 6/22/2016 7:42
99213 80 6/22/2016 13:02
99214 80 6/22/2016 6:30
99221 80 6/22/2016 6:57
99224 80 6/22/2016 7:48
99226 80 6/22/2016 6:27
99228 80 6/22/2016 8:49
99229 80 6/22/2016 8:53
99232 80 6/22/2016 9:18
99237 80 6/22/2016 13:08
但是当我尝试删除 WHERE UserID= 语句并尝试将其用作子查询时:
SELECT UserID, COUNT(*) as count FROM (
SELECT * FROM (
SELECT TicketID, UserID, EventDateTime
FROM dcscontact.ticketevents
WHERE EventDateTime BETWEEN '2016-06-22' AND '2016-06-23'
ORDER BY EventDateTime DESC) x
GROUP BY TicketID) y
GROUP BY UserID;
我得到了错误的计数:
UserID count
9 2
28 1
31 1
42 1
80 5
95 1
99 6
108 4
116 12
117 26
123 24
如您所见,UserID 80 的计数应该是 11。大多数其他结果也不正确,它们似乎都比我预期的要小。
在子查询上使用 GROUP BY/COUNT 时我做错了什么吗?如何更改我的查询以获得我想要的结果?
【问题讨论】:
-
真的不需要重新选择与分组相同的结果。
-
如果多个用户“触摸”同一个ticketid,你的内部查询的group by 将有效地消除这个事实;非聚合、非分组字段的值将从具有相同分组字段值的行中随机(有效)选择。
标签: mysql sql count group-by mariadb