我的问题是我正在尝试使用子查询在一个查询中多次分组一些数据。例如,如果我有人的'姓名'和'性别',那就是:
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
基于此?
答案 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