首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接3个表时使用count和sum的SQL

连接3个表时使用count和sum的SQL
EN

Stack Overflow用户
提问于 2017-05-05 07:56:59
回答 1查看 124关注 0票数 0

当我尝试连接两个表并使用SUM或COUNT时,它们都能完美地工作并达到预期效果。但是,当我连接3个表时,SUM和COUNT没有任何意义,因为join语句为每个表创建了额外的行,使其具有唯一的行,因此它们过多地计数并对所需的值求和。

下面是查询:

代码语言:javascript
复制
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 tablesCOUNT()只在PO_club and PO_club_users上工作,而SUM只能在PO_club and PO_club_point_log上工作?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-05-05 09:10:58

这个怎么样?这将包括所有PO_clubs,即使他们没有任何用户,以防他们有积分。如果这不是您想要的,请将第一个LEFT JOIN更改为INNER JOIN

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43794470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档