Mysql 使用聚合功能在多级组的所有级别上重复所有值
我想得到column3的计数,但我想按column1和column2对其进行分组,其中column2始终具有column2的相同(全部)值 我的当前版本: 代码: 我的问题是:Mysql 使用聚合功能在多级组的所有级别上重复所有值,mysql,group-by,aggregate,Mysql,Group By,Aggregate,我想得到column3的计数,但我想按column1和column2对其进行分组,其中column2始终具有column2的相同(全部)值 我的当前版本: 代码: 我的问题是: SELECT column1 ,column2 ,COUNT(column3) FROM table1 GROUP BY column1 ,column2 结果 column1 colum
SELECT
column1
,column2
,COUNT(column3)
FROM
table1
GROUP BY
column1
,column2
结果
column1 column2 COUNT(column3)
aa ba 4
aa bb 2
aa bc 2
ab ba 1
ab bc 1
现在是我的问题,我如何确保所有column1聚合中column2的值相同?如果我错过了示例中的
ab;bb;0
所以我希望对于column1的每一个值,我都有相同的column2的值集。这意味着实际上,缺少的值会被0作为计数填充。您必须首先生成所有允许的值(column1 x column2),然后
将其与查询左连接。您的查询将提供它知道的计数,否则您将得到0:
select base1.column1, base2.column2, ifnull(YourQuery.cnt, 0)
from (select distinct column1 from table1) as base1
cross join (select distinct column2 from table1) as base2
left join
(SELECT column1,column2,COUNT(column3) as cnt
FROM table1
GROUP BY column1,column2
) as YourQuery
on YourQuery.column1 = base1.column1 and YourQuery.column2 = base2.column2;
您必须首先生成所有允许的值(column1 x column2),然后将其与查询左连接。您的查询将提供它知道的计数,否则您将得到0:
select base1.column1, base2.column2, ifnull(YourQuery.cnt, 0)
from (select distinct column1 from table1) as base1
cross join (select distinct column2 from table1) as base2
left join
(SELECT column1,column2,COUNT(column3) as cnt
FROM table1
GROUP BY column1,column2
) as YourQuery
on YourQuery.column1 = base1.column1 and YourQuery.column2 = base2.column2;
这个想法基本上是获得所有的组合,并使用join或union来填补空白,这里我使用的是union all
SELECT
column1
,column2
,count(column3)
from (
select column1, column2, column3 from table1
union all
select column1,column2, null as column3
from (select distinct column1 from table1 ) all_c1
cross join ( select distinct column2 from table1) all_c2
)t group by column1, column2;
这个想法基本上是获得所有的组合,并使用join或union来填补空白,这里我使用的是union all
SELECT
column1
,column2
,count(column3)
from (
select column1, column2, column3 from table1
union all
select column1,column2, null as column3
from (select distinct column1 from table1 ) all_c1
cross join ( select distinct column2 from table1) all_c2
)t group by column1, column2;
请复习。这是一种礼貌的说法,表示你必须投入最低限度的努力,这在这里并不明显。你的问题不清楚。请修改。@JarrodRoberson对不起,把它放在小提琴里,再加上一些解释。希望现在清楚了。不要把代码放在非现场资源上,把它们放在问题的内联部分。还是不清楚@贾罗德·罗伯森喜欢那样吗?请复习。这是一种礼貌的说法,表示你必须投入最低限度的努力,这在这里并不明显。你的问题不清楚。请修改。@JarrodRoberson对不起,把它放在小提琴里,再加上一些解释。希望现在清楚了。不要把代码放在非现场资源上,把它们放在问题的内联部分。还是不清楚@JarrodRoberson喜欢吗?非常感谢,但是@Solarflare的解决方案有点优雅(在我看来)。非常感谢,但是@Solarflare的解决方案有点优雅(在我看来)。