Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用左外部联接获取同一表计数的SQL查询_Sql_Join_Group By - Fatal编程技术网

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

使用左外部联接获取同一表计数的SQL查询,sql,join,group-by,Sql,Join,Group By,我有一个表,我需要从中获得按两列分组的计数 该表有两列,一列是datetime列,另一列是success value(-1,1,0) 我要找的是这样的东西: 每个月的成功值计数: 月----成功------计数 11------1------50 11------1------50 11---0---50 12------1------50 12------1------50 12---0---50 如果一个月没有成功值,则计数应为null或零。 我也尝试过左外部联接,但并没有用,它给出了错误的

我有一个表,我需要从中获得按两列分组的计数

该表有两列,一列是
datetime
列,另一列是success value(-1,1,0) 我要找的是这样的东西:

每个月的成功值计数:

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

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

11---0---50

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

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

12---0---50

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

您可能需要一个表,其中包含要联接的1-12之间的值,这样您就可以得到零计数。

您可能需要一个表,其中包含要联接的1-12之间的值,这样您就可以得到零计数。

您需要交叉联接所有的值可用月数,对照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”稍微复杂一点

@更新
对于左联接,计数(*)将始终至少返回1。从左联接的右侧开始计数(colname)才能正确。

您需要根据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”稍微复杂一点

@更新
对于左联接,计数(*)将始终至少返回1。左联接右侧的计数(colname)正确。

hi查询返回预期的行数,但对于特定月份,计数返回为1,其中应为零:(hi查询返回预期的行数,但对于特定月份,计数返回为1,其中应为零:(