Mysql SQL在连接3个表时使用count和sum
当我尝试连接两个表并使用SUM或COUNT时,一切都很好,正如预期的那样。但是,当我连接3个表时,SUM和COUNT没有任何意义,因为join语句为每个表创建了额外的行,使其具有唯一的行,因此它们会对所需的值进行过度计数和过度求和 以下是查询:Mysql SQL在连接3个表时使用count和sum,mysql,join,Mysql,Join,当我尝试连接两个表并使用SUM或COUNT时,一切都很好,正如预期的那样。但是,当我连接3个表时,SUM和COUNT没有任何意义,因为join语句为每个表创建了额外的行,使其具有唯一的行,因此它们会对所需的值进行过度计数和过度求和 以下是查询: SELECT PO_club.clubid, PO_club.name, PO_club.pic, PO_club.points, count(PO_club_user.userid), SUM(PO_club_point_log.points) FRO
SELECT PO_club.clubid, PO_club.name, PO_club.pic, PO_club.points, count(PO_club_user.userid), SUM(PO_club_point_log.points)
FROM PO_club
INNER JOIN PO_club_user ON PO_club.clubid = PO_club_user.clubid
LEFT JOIN PO_club_point_log ON PO_club.clubid = PO_club_point_log.clubid
WHERE PO_club.deleted = 0
GROUP BY PO_club.clubid
ORDER BY PO_club.points DESC;
如果我运行两个单独的脚本,如first join onlyPO_club\u和PO_club\u user
,以获得COUNT()
,它就会工作。然后运行PO\u club JOIN PO\u club\u point\u log
以获取SUM()
一切正常。但是,我需要运行一个脚本,这样我就不需要在前端对它进行排序。有没有办法加入3个表
并以某种方式COUNT()
只在PO_俱乐部和PO_俱乐部用户上工作
,而SUM
只在PO_俱乐部和PO_俱乐部点日志上工作
谢谢 这怎么样?这将包括所有PO_俱乐部,即使他们没有任何用户,以防他们有积分。如果这不是您想要的,请将第一个
左连接
更改为内部连接
SELECT PO_club.clubid, PO_club.name, PO_club.pic, PO_club.points, count(PO_club_user.userid), t.sum_points
FROM PO_club
LEFT JOIN PO_club_user ON PO_club.clubid = PO_club_user.clubid
LEFT JOIN
(SELECT PO_club_point_log.clubid, SUM(PO_club_point_log.points) AS sum_points
FROM PO_club_point_log INNER JOIN PO_club ON PO_club_point_log.clubid = PO_club.clubid
GROUP BY PO_club_point_log.clubid) AS t
ON PO_club.clubid = t.clubid
WHERE PO_club.deleted = 0
GROUP BY PO_club.clubid
ORDER BY PO_club.points DESC
如果俱乐部没有用户,则您不希望在PO_club.clubid=PO_club_user.clubid上以
内部加入PO_club_用户的方式输出俱乐部。更好的方法是显示您的表架构和所需的输出。