Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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
Mysql 使用聚合功能在多级组的所有级别上重复所有值_Mysql_Group By_Aggregate - Fatal编程技术网

Mysql 使用聚合功能在多级组的所有级别上重复所有值

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

我想得到column3的计数,但我想按column1和column2对其进行分组,其中column2始终具有column2的相同(全部)值

我的当前版本:

代码:

我的问题是:

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的解决方案有点优雅(在我看来)。