如何正确使用双GROUP BY

How to use double GROUP BY correctly

我的问题是我试图使用子查询在一个查询中多次对一些数据进行分组。例如,如果我有像这样的 'name' 和 'gender' 的人:

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

他们知道的语言 Known_Languages collection:

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

我想找到懂一种以上语言的人,然后将结果显示为两种性别的多语言人数:

 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

基于此?

您可以使用派生的 table 来获取说不止一种语言的人,然后 join 它到 People table 来获取 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