首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用SUM和CASE计算输赢?

如何用SUM和CASE计算输赢?
EN

Stack Overflow用户
提问于 2012-01-08 02:27:38
回答 3查看 780关注 0票数 8

我使用的是SQL Server 2008

我正在尝试计算任何给定自行车的输赢。每次用户投票时,他都会投票支持一辆自行车(1),并投票反对另一辆自行车(0)。

我的投票表如下所示:

代码语言:javascript
复制
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

当我对特定自行车运行查询时,我希望我的结果如下所示

代码语言:javascript
复制
Wins -- Losses
5       6

现在,我的结果如下所示:

代码语言:javascript
复制
Wins --- Losses
5        NULL
NULL     6   

我的查询如下所示:

代码语言:javascript
复制
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

我需要做什么才能在一行上得到结果?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-08 02:29:28

代码语言:javascript
复制
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。

此外,您不需要group by vote,因为您实际上并没有在聚合之外选择投票。

票数 6
EN

Stack Overflow用户

发布于 2012-01-08 07:09:30

假设Votebit

代码语言:javascript
复制
SELECT
  Wins   = SUM(0 + Vote),
  Losses = SUM(1 - Vote)
FROM Votes
WHERE BikeID = 101

如果Vote不是bit,则可以在Wins计算中去掉0 +

票数 3
EN

Stack Overflow用户

发布于 2012-01-08 08:52:18

假设VoteInt,并且只接受01值,您还可以使用以下代码:

代码语言:javascript
复制
SELECT
  SUM(Vote) AS Wins, 
  COUNT(*) - SUM(Vote) AS Losses
FROM Votes
WHERE BikeID = 101
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8771980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档