我正在重新访问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的第一行。只有带有fine = 1
的FINES中的行才会添加到COUNT。
我不确定在一个查询中我是否可以尝试做什么,并希望得到一些帮助。
答案 0 :(得分: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
我把coalesce放在那里因为在某些使用空值
SUM()
的系统上会发出警告或错误。
答案 1 :(得分: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
诀窍。