繁体   English   中英

使用左外部联接在同一表上获取计数的SQL查询

[英]SQL query for getting count on same table using left outer join

我有一个表格,需要从该表格中将计数分为两列。

该表有两列,一列为datetime列,另一列为成功值(-1,1,0),我正在寻找的是这样的:

每个月的成功价值计数:

月----成功--------计数
11 ------- -1 ------- 50

11 ------- 1 --------- 50

11 ------- 0 ------- 50

12 ------- -1 ------- 50

12 ------- 1 ------- 50

12 ------- 0 ------- 50

如果一个月没有成功值,则计数应为null或零。 我也尝试过使用左外部联接,但没有用,它使计数错误。

您需要将所有可用月份与3个成功值交叉连接,以建立虚拟矩阵,然后可以将其与实际数据保持连接

select m.month, s.success, COUNT(t.month)
from (select distinct MONTH from tbl) m
cross join (select -1 success union all select 1 union all select 0) s
left join tbl t on t.month = m.month and t.success = s.success
group by m.month, s.success

如果您还需要缺少月份,则可以通过更改上面的子查询“ m”来完成,只是稍微复杂一点。

@updated Count(*)对于左连接总是返回至少1。 左边连接的右边的count(colname)是正确的。

您可能需要一个仅包含1-12值的表进行连接,以便获得零计数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM