我有一张表,我需要将这些计数分组到两列。
该表有两列,一列datetime
列,另一列是成功值(-1,1,0)
我正在寻找的是这样的:
每个月的成功价值计数:
月份----成功-----计数 11 ------- 1 --------- 50
11 ------- 0 ------- 50
12 ------- -1 ------- 50
12 ------- 1 ------- 50
12 ------- 0 ------- 50
如果一个月没有成功值,则计数应为null
或零。
我也尝试过使用左外连接,但没有用,它会错误地计算。
答案 0 :(得分:1)
您需要交叉加入所有可用月份,并根据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。从左连接的右边部分开始计数(colname)是正确的。
答案 1 :(得分:0)
您可能需要一张仅包含1-12值的表格,以便您可以获得零点数。