2017-08-24 102 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