MySQL-添加连接更改计数/总和值?

MySQL-添加连接更改计数/总和值?,mysql,sql,count,aggregate-functions,Mysql,Sql,Count,Aggregate Functions,我忍不住想这是一个常见的问题,但就我的一生而言,我找不到解决办法 假设我有这个问题: 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_t

我忍不住想这是一个常见的问题,但就我的一生而言,我找不到解决办法

假设我有这个问题:

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
…在本例中,早期的计数/总和统计数据现在相差甚远,总计应为40,然后跳至880

我做错了什么


我很确定这与GROUP BY有关,我也尝试过在其中添加列,但我似乎无法解决这个问题。

试试下面的方法。它首先使用一个子查询计算计数。此解决方案中也可能不需要使用distinct

SELECT
    ue.user,
    SUM(w.times) AS total_watches,
    COUNT(w.vid_id) AS total_unique_watches,
    m.answered_vid_events
FROM users ue
LEFT JOIN watches w ON w.user_id = ue.user
LEFT JOIN (
   SELECT from_uid, COUNT(DISTINCT linked_vid_evt) answered_vid_events
   FROM messages
   GROUP BY from_uid 
) m ON m.from_uid = ue.user
WHERE ue.user = "fv9jgpd1cmo" && ue.user_type IN ("ds", "s")
GROUP BY ue.user

毫无疑问,新的连接创建了更多记录一对多关系。要解决这个问题,您可以使用子查询从uid计算每个链接的\u vid\u evt,然后再返回到外部查询兴趣。。。如果你能在回答中详细说明,我就试一试。谢谢,谢谢-我请客了。为什么我不必在第一次加入时这样做,在手表上?是否仅在第一次之后才进行后续连接?@Utkanos因为一行手表只有一个用户,所以可以。但是,当您加入消息时,一行手表可能会通过用户和用户之间的交互产生许多相应的消息。因此,监视或消息聚合必须在子查询中,或者两者都在。