我正在使用 SQL Server 2008
我正在尝试计算任何给定自行车的得失。每次用户投票时,他都会对一辆自行车投一票 (1),对另一辆自行车投反对票 (0)。
我的投票表如下所示:
VoteID --- BikeID ---- Vote
1 100 1
2 101 0
3 100 0
4 101 1
5 102 1
6 100 0
7 102 0
8 101 1
当我对特定自行车运行查询时,我希望我的结果看起来像这样
Wins -- Losses
5 6
现在,我的结果是这样的:
Wins --- Losses
5 NULL
NULL 6
我的查询如下所示:
SELECT SUM(CASE WHEN Vote = 1 THEN 1 END) AS Wins,
SUM(CASE WHEN Vote = 0 THEN 1 END) AS Losses
FROM Votes
WHERE BikeID = 101
GROUP BY Vote
我需要做什么才能在一行上获得结果?
最佳答案
SELECT SUM(CASE WHEN Vote = 1 THEN 1 ELSE 0 END) AS Wins,
SUM(CASE WHEN Vote = 0 THEN 1 ELSE 0 END) AS Losses
FROM Votes
WHERE BikeID = 101
问题是您的 case 语句没有涵盖所有条件,因此对于它们没有考虑的情况返回 null。
此外,您不需要投票分组,因为您实际上并没有选择聚合之外的投票。
关于sql - 如何使用 SUM 和 CASE 计算输赢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8771980/