报告 - 横向联合是我任务的解决方案吗?
Report - is something like horizontal union a solution of my task?
我想将按水平方向相同属性的几个值分组的数据分组。
例如,如果我有这样实现的 People 集合:
name group_id sex
('Mike', 'A', 'Male')
('Mark', 'B', 'Male')
('Peter', 'C', 'Male')
('Sarah', 'A', 'Female')
('Dolores', 'A', 'Female')
('Jessica', 'C', 'Female')
我可以按 group_id 和这样的性别对它们进行分组:
SELECT sex, group_id, COUNT(*) "nr of people"
FROM People
GROUP BY sex, group_id;
并得到:
sex group_id nr of people
Female A 2
Female B 0
Female C 1
Male A 1
Male B 1
Male C 1
但我想以更优雅、更简短的形式做类似的事情,并将每个组显示为这样的列:
Sex Group A Group B Group C
Female 2 0 1
Male 1 1 1
使用CASE
进行条件计数:
SELECT sex,
sum(case when group_id = 'A' then 1 else 0 end) as group_A,
sum(case when group_id = 'B' then 1 else 0 end) as group_B,
sum(case when group_id = 'C' then 1 else 0 end) as group_C
FROM People
GROUP BY sex;
我想将按水平方向相同属性的几个值分组的数据分组。 例如,如果我有这样实现的 People 集合:
name group_id sex
('Mike', 'A', 'Male')
('Mark', 'B', 'Male')
('Peter', 'C', 'Male')
('Sarah', 'A', 'Female')
('Dolores', 'A', 'Female')
('Jessica', 'C', 'Female')
我可以按 group_id 和这样的性别对它们进行分组:
SELECT sex, group_id, COUNT(*) "nr of people"
FROM People
GROUP BY sex, group_id;
并得到:
sex group_id nr of people
Female A 2
Female B 0
Female C 1
Male A 1
Male B 1
Male C 1
但我想以更优雅、更简短的形式做类似的事情,并将每个组显示为这样的列:
Sex Group A Group B Group C
Female 2 0 1
Male 1 1 1
使用CASE
进行条件计数:
SELECT sex,
sum(case when group_id = 'A' then 1 else 0 end) as group_A,
sum(case when group_id = 'B' then 1 else 0 end) as group_B,
sum(case when group_id = 'C' then 1 else 0 end) as group_C
FROM People
GROUP BY sex;