2017-08-24 121 views
-1

我正在重新訪問SQL,因爲我開始了一個新項目。雙左加入SQL?

我有3個表(僅顯示有用的字段):

球員: ID

罰款 player_id,精細

Finelist ID,價格

我想爲每個球員獲得總罰金。我正在努力爲每筆罰款增加價格。

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的第一行考慮。只有FINES中有fine = 1的行纔會被添加到COUNT。

我不知道我想要做什麼可能在一個查詢中,並希望得到一些幫助。

+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做一個左連接。應該是這樣的:

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 

我把聚結在那裏,因爲上一個空值使用SUM()將給予警告或錯誤的一些系統。

+0

您的解決方案也可以工作,謝謝! –

+0

大聲笑我知道它的作品。你的歡迎,祝你好運。 – Hogan