2017-05-04 74 views
0

當我嘗試連接2個表並使用SUM或COUNT時,它可以完美並按預期工作。但是,當我連接3個表時,SUM和COUNT沒有任何意義,因爲JOIN語句會爲每個表創建額外的行,使其具有唯一的行,因此它們會重複計算並重新計算所需的值。SQL在連接3個表時使用count和sum

下面是該查詢:

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; 

如果我運行兩個獨立的腳本,只喜歡PO_club and PO_club_user得到COUNT()它的作品第一次參加。然後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

謝謝!

+0

如果俱樂部有沒有用戶,你不希望輸出的俱樂部,如'INNER JOIN PO_club_user ON PO_club.clubid = PO_club_user.clubid'? – Eggsalad

+0

更好地顯示您的表格模式和所需的輸出。 –

回答

0

這是怎麼回事?這將包括所有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 DESC