【发布时间】:2018-01-11 13:12:24
【问题描述】:
我不禁认为这是一个常见问题,但对于我的一生,我找不到解决方案。
假设我有这个查询:
SELECT
ue.user,
SUM(w.times) AS total_watches,
COUNT(w.vid_id) AS total_unique_watches,
FROM users ue
LEFT JOIN watches w ON w.user_id = ue.user
WHERE ue.user = "fv9jgpd1cmo" && ue.user_type IN ("ds", "s")
GROUP BY ue.user
效果很好。它会拉出用户,加上他们观看任何视频的次数,以及他们观看过的独特视频的数量。这些值是正确的 - 我已经检查过了。
如果我随后使用另一个连接扩展查询:
SELECT
ue.user,
SUM(w.times) AS total_watches,
COUNT(w.vid_id) AS total_unique_watches,
COUNT(DISTINCT m.linked_vid_evt) AS answered_vid_events
FROM users ue
LEFT JOIN watches w ON w.user_id = ue.user
LEFT JOIN messages m ON m.from_uid = ue.user /* <-- new join */
WHERE ue.user = "fv9jgpd1cmo" && ue.user_type IN ("ds", "s")
GROUP BY ue.user
...之前的 COUNT/SUM 统计数据现在已经偏离(在本例中,total_watches 应该是 40,然后跳转到 880。)
我做错了什么?
我很确定这与 GROUP BY 有关,并且我尝试向其中添加列,但我似乎无法破解它。
【问题讨论】:
-
毫无疑问,新连接会创建更多记录(一对多关系)。为了解决这个问题,您可以使用子查询来计算每个 from_uid 的linked_vid_evt,然后再加入外部查询
-
有趣...如果您可以在答案中详细说明,我会试一试。谢谢。
标签: mysql sql count aggregate-functions