Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL在连接3个表时使用count和sum_Mysql_Join - Fatal编程技术网

Mysql SQL在连接3个表时使用count和sum

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

当我尝试连接两个表并使用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)
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 only
PO_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_用户的方式输出俱乐部。更好的方法是显示您的表架构和所需的输出。