如何正确使用双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
我的问题是我试图使用子查询在一个查询中多次对一些数据进行分组。例如,如果我有像这样的 '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