sql - 如何使用 SUM 和 CASE 计算输赢?

标签 sql tsql

我正在使用 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/

相关文章:

类似 SQL 的 Windows 注册表包装器?

SQL 服务器 : find break in dates to show unique rows

SQL Server 从另一个表创建临时表

security - 限制分号以防止 SQL 注入(inject)?

sql - 多列中的不同值

sql - 如何在单个查询中获取一天的总和和最后三天的总和?

mysql 查询没有返回想要的结果

mysql - mysql集群建表时出错

mysql - 在 MSSQL 和 mySQL 中获取所有表及其数据

sql-server - 合并声明和身份插入