2017-08-24 16 views
-1

私は新しいプロジェクトを開始したので、SQLを再訪しています。SQLで二重左結合?

プレーヤー:

Finelist ID細かい ID

罰金 player_id、価格

は、私は3つのテーブル(図示のみ有用フィールド)を持っています私は各プレーヤーのために全体の罰金を得たいです。私はそれぞれの罰金の価格を追加することに苦労しています。

SELECT p.id, COUNT(f.player_id) FROM PLAYERS p LEFT JOIN FINES f ON (p.id=f.player_id) GROUP BY p.id

各プレイヤーのための罰金の適切な量を返します。今私は違う価格で違う罰金を持っています。今、私は中にそれらを追加したい、私はこのようにそれを試してみました:。

SELECT p.id, COUNT(f.player_id) * fl.price FROM PLAYERS p LEFT JOIN FINES f ON (p.id=f.player_id), FINELIST fl WHERE fl.id = f.fine GROUP BY p.id

今では唯一のアカウントにFINELISTの最初の行を取ります。 fine = 1のFINESの行のみがCOUNTに追加されます。

私がしようとしていることが1つのクエリで可能であり、何か助けてもらいたいのかどうか分かりません。

+0

SUM()を代わりに使用する –

+0

サンプルデータを表示する必要があります –

答えて

1

SELECT p.id, SUM(fl.price) FROM PLAYERS p LEFT JOIN FINES f ON (p.id=f.player_id), FINELIST fl WHERE fl.id = f.fine GROUP BY p.id

トリックしましたか?

2

FINELISTを使用して左結合を行いたいとします。 NULL値にSUM()を使用して、いくつかのシステムで警告またはエラーが発生しますので、私はそこに合体を入れ

SELECT 
    p.id, 
    COUNT(*) as fine_count, 
    SUM(COALESCE(fl.price,0)) as total_fine 
FROM PLAYERS p 
LEFT JOIN FINES f ON p.id=f.player_id 
LEFT JOIN FINELIST fl ON fl.id = f.fine 
GROUP BY p.id 

:次のようになります。

+0

解決策もありがとうございました! –

+0

笑私はそれが動作することを知っている。あなたの歓迎、幸運。 – Hogan