报告 - 横向联合是我任务的解决方案吗?

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;