我有下表(球员、赛事、得分)
我想要一份每个球员在 2012 年获得多少积分的列表。
我希望这份名单包含所有球员,即使有些球员在 2012 年还没有参加过比赛。
所以理论上它应该打印:
Ola Hansen 6
Tove Svendson 0
Kari Pettersen 0
I tried:
SELECT *, sum(Points) as Points FROM Players
LEFT OUTER JOIN Scores ON P_Id=Player
LEFT OUTER JOIN Events ON Event=E_Id AND Year='2012'
GROUP by P_Id ORDER by Points DESC
但这计算了所有这些年的所有分数。
分数和事件需要内联before将它们外部连接到玩家。
我们可以使用子查询或括号来强制执行此特定连接“优先级”,但最好只使用 SQL 文本中的 JOIN 顺序,然后小心地将最后一个 JOIN“定向”到玩家(在本例中为 RIGHT)。
COALESCE 只是用于将 NULL 转换为 0。
SELECT
P_Id, LastName, FirstName, COALESCE(SUM(Points), 0) TotalPoints
FROM
Scores
JOIN Events
ON Event = E_Id AND Year = 2012
RIGHT JOIN Players
ON P_Id = Player
GROUP BY
P_Id, LastName, FirstName
ORDER BY
TotalPoints DESC;
这会产生:
P_ID LASTNAME FIRSTNAME TOTALPOINTS
1 Hansen Ola 6
2 Svendson Tove 0
3 Pettersen Kari 0
你可以在这个里面玩SQL小提琴 http://sqlfiddle.com/#!2/03622/38.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)