我想获取colum3的计数,但我想按column1和column2对其进行分组,从而column2始终具有column2的(所有)值。
我当前的版本:http://sqlfiddle.com/#!9/00d9d/1/0
码:
CREATE TABLE table1
(`column1` varchar(2), `column2` varchar(2), `column3` varchar(2))
;
INSERT INTO table1
(`column1`, `column2`, `column3`)
VALUES
('aa', 'ba', 'ca'),
('aa', 'ba', 'cb'),
('aa', 'ba', 'cc'),
('aa', 'bb', 'ca'),
('aa', 'bb', 'cb'),
('aa', 'bc', 'ca'),
('aa', 'bc', 'cb'),
('aa', 'ba', 'ca'),
('ab', 'ba', 'cb'),
('ab', 'bc', 'ca')
;
我的查询:
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),然后在查询中对此left join
进行生成。您的查询将在其知道的地方提供计数,否则您将只得到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;
关于mysql - 通过聚合功能在多级组的所有级别上重复所有值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37216015/