Hello是否可以在SQL中仅引用当前行?
我有以下SQL查询:
SELECT MONTH(Date) as Date, COUNT(Id) as Bets, COUNT(Status) as Won, FROM Bets
GROUP BY Datum
现在我想在他们的几个月中计算所有赢得的赌注。
它应该是这样的:
Month | Bets | Won
1 | 1 | 0
11 | 4 | 2
12 | 2 | 1
现在看起来像这样:
Month | Bets | Won
1 | 1 | 1
11 | 4 | 4
12 | 2 | 2
我现在该如何为Count(Status)子句添加条件或处理此问题?
感谢您的帮助。
编辑:
我有两张桌子:
投注:
Id : int (Primary Key)
Date : date
Status : int (Foreign Key)
状态:
Id : int (Primary Key)
Status : varchar
表中还有一些但不相关的列。
赢得应该是计数状态如1的所有投注的数量。
状态:
1 - 赢了
2 - 失去了
3 - 打开
答案 0 :(得分:1)
您正在寻找条件聚合。我想我明白你是怎么想的。所以,答案是您使用case
:
SELECT MONTH(Date) as Date, COUNT(Id) as Bets,
SUM(CASE WHEN Status = 1 THEN 1 ELSE 0 END) as Won
FROM Bets
GROUP BY MONTH(Date);
case
正在执行条件"在"一行(所有列都来自同一行)。请注意,按月汇总时,通常也应按年汇总。
作为注释:以上是ANSI标准SQL,基本上所有数据库都支持。某些数据库中有快捷方式。例如,Postgres支持FILTER
子句,它更接近你的要求。