当我尝试连接两个表并使用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; 如果我运行两个单独的脚本来获取COUNT(),比如first join only PO_club and PO_club_user,它就可以工作。然后使用run PO_club JOIN PO_club_point_log来获取SUM(),一切都很好。但是,我需要运行一个脚本,这样我就不需要在前端对其进行排序。有没有办法让join 3 tables和COUNT()只在PO_club and PO_club_users上工作,而SUM只能在PO_club and PO_club_point_log上工作?
谢谢!
发布于 2017-05-05 09:10:58
这个怎么样?这将包括所有PO_clubs,即使他们没有任何用户,以防他们有积分。如果这不是您想要的,请将第一个LEFT JOIN更改为INNER JOIN。
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 DESChttps://stackoverflow.com/questions/43794470
复制相似问题