Sql 报告-类似于横向联合的东西是我任务的解决方案吗?
我想将数据分组为几个相同属性的值。 例如,如果我有这样实现的人员集合:Sql 报告-类似于横向联合的东西是我任务的解决方案吗?,sql,oracle11g,group-by,union,Sql,Oracle11g,Group By,Union,我想将数据分组为几个相同属性的值。 例如,如果我有这样实现的人员集合: name group_id sex ('Mike', 'A', 'Male') ('Mark', 'B', 'Male') ('Peter', 'C', 'Male') ('Sarah', 'A', 'Female') ('Dolores', 'A', 'Female') ('Jessica', 'C', 'Female') SELECT sex, group_id, COUNT(*) "nr of peo
name group_id sex
('Mike', 'A', 'Male')
('Mark', 'B', 'Male')
('Peter', 'C', 'Male')
('Sarah', 'A', 'Female')
('Dolores', 'A', 'Female')
('Jessica', 'C', 'Female')
SELECT sex, group_id, COUNT(*) "nr of people"
FROM People
GROUP BY sex, group_id;
Sex Group A Group B Group C
Female 2 0 1
Male 1 1 1
我可以按组id和性别对他们进行分组:
name group_id sex
('Mike', 'A', 'Male')
('Mark', 'B', 'Male')
('Peter', 'C', 'Male')
('Sarah', 'A', 'Female')
('Dolores', 'A', 'Female')
('Jessica', 'C', 'Female')
SELECT sex, group_id, COUNT(*) "nr of people"
FROM People
GROUP BY sex, group_id;
Sex Group A Group B Group C
Female 2 0 1
Male 1 1 1
并获得:
sex group_id nr of people
Female A 2
Female B 0
Female C 1
Male A 1
Male B 1
Male C 1
但我想以更优雅、更简短的形式做这样的事情,并以这样的专栏形式呈现每个小组:
name group_id sex
('Mike', 'A', 'Male')
('Mark', 'B', 'Male')
('Peter', 'C', 'Male')
('Sarah', 'A', 'Female')
('Dolores', 'A', 'Female')
('Jessica', 'C', 'Female')
SELECT sex, group_id, COUNT(*) "nr of people"
FROM People
GROUP BY sex, group_id;
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;
非常感谢。这正是我想要的。