如何正确使用双GROUP BY

时间:2015-11-12 16:21:42

标签: sql oracle11g group-by subquery oracle-sqldeveloper

我的问题是我正在尝试使用子查询在一个查询中多次分组一些数据。例如,如果我有人的'姓名'和'性别',那就是:

   name  gender
('Sarah', 'F')
('Mark', 'M')
('Jessie', 'F')

他们在Known_Languages集合中知道的语言:

   name     language
('Sarah', 'English')
('Sarah', 'French')
('Mark', 'German')
('Jessie', 'German')

我希望找到知道超过1种语言的人,而不是将结果显示为两种性别的多语言人数:

 GENDER        NUMBER OF MULTILANGUAGE PEOPLE
     F                                      1
     M                                      0

我知道我可以按照他们的名字对人进行分组:

SELECT name, COUNT(*)
FROM People NATURAL JOIN Known_Languages
GROUP BY name
HAVING COUNT(*) > 1;

但如何获得如下结果:

     GENDER        NUMBER OF MULTILANGUAGE PEOPLE
     F                                      1
     M                                      0

基于此?

1 个答案:

答案 0 :(得分:3)

您可以使用派生表来吸引使用多种语言的人,并join使用People表来获取每个性别的count

select p.gender, count(*) number_of_multilanguage_people
from (SELECT name
      FROM Known_Languages
      GROUP BY name
      HAVING COUNT(*) > 1) t 
join People p on p.name = t.name
group by p.gender