我得到了这个SELECT.我想计算(或总和?)玩家的黄牌和红牌(只有YellowCard = 1时才计数黄牌,而RedCard = 1时只计算红牌)..此SELECT无法正常工作.它即使有0或NULL也会计数卡.我该如何纠正它?
SELECT Firstname, Lastname, COUNT(YellowCard) AS Yellow, COUNT(RedCard) AS Red, Team.Name
FROM PlayerMatch
Inner join Player On PlayerMatch.PlayerId = Player.PlayerId
INNER JOIN Team ON Player.TeamId = Team.TeamId
INNER JOIN Match ON PlayerMatch.MatchId = Match.MatchId
WHERE(YellowCard = 1 OR RedCard = 1)
GROUP BY Lastname, Firstname, Name
ORDER BY Yellow DESC
Run Code Online (Sandbox Code Playgroud)
使用SUM()而不是COUNT():
SELECT Firstname, Lastname,
SUM(YellowCard) AS Yellow, SUM(RedCard) AS Red, t.Name
FROM PlayerMatch pm Inner join
Player p
On pm.PlayerId = p.PlayerId INNER JOIN
Team t
ON p.TeamId = t.TeamId INNER JOIN
Match m
ON pm.MatchId = m.MatchId
WHERE (YellowCard = 1 OR RedCard = 1)
GROUP BY Lastname, Firstname, Name
ORDER BY Yellow DESC;
Run Code Online (Sandbox Code Playgroud)
这假定的值YellowCard和RedCard总是0或1(或NULL).这似乎是一个合理的假设.
如果不是这样,那么使用CASE:
SELECT Firstname, Lastname,
SUM(CASE WHEN YellowCard = 1 THEN 1 ELSE 0 END) AS Yellow,
SUM(CASE WHEN RedCard = 1 THEN 1 ELSE 0 END) AS Red,
t.Name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |