2017-05-04 7 views
0

2つのテーブルを結合してSUMまたはCOUNTを使用しようとすると、すべてが完全に正常に動作します。しかし、3つのテーブルを結合するとき、SUMとCOUNTは意味をなさない。なぜなら、JOINステートメントは、各テーブルが一意の行を持つために追加の行を作成し、私は最初だけPO_club and PO_club_userは、それが動作COUNT()を得るために参加のような二つの別々のスクリプトを実行する場合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; 

:ここ

はクエリです。そして run PO_club JOIN PO_club_point_logを得て、 SUM()を得てください。しかし、私はそれをフロントエンドでソートする必要がないように1つのスクリプトを実行する必要があります。 join 3 tablesへの道はありますか何とか COUNT()はちょうど PO_club and PO_club_usersの上で働いています SUMPO_club and PO_club_point_logにかかりますか?

ありがとうございます!

+0

クラブは何のユーザーを持っていない場合は、あなたがPO_club.clubid = PO_club_user.clubid' ON 'INNER JOINをPO_club_userのように出力クラブにしたくないですか? – Eggsalad

+0

あなたのテーブルのスキーマと望ましい出力を示す方がはるかに優れています。 –

答えて

0

どういうことですか? PO_clubにはポイントがある場合に備えてユーザーがいなくてもすべてのPO_clubが含まれます。それがあなたの望むものでない場合は、最初のLEFT JOININNER 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 
関連する問題