我有以下表格:
我试图通过CountryOfResidence找到包含1970年以前出生的人的所有家庭的数量。
我无法与Person
和Family
进行联接,因为这会给我每个人的唯一数量。我想要在家庭中的任何人在1970年之前出生时,只计算一次家庭。
有人可以帮我制作这个查询吗?我觉得子查询可以完成我想要的,但我担心性能。
修改
添加了SQL小提琴:http://sqlfiddle.com/#!9/b92e3/1/0
预期结果:
-------------------------------
|CountryOfResidence | count(*)|
|-----------------------------|
|Poland | 1 |
|USA | 1 |
-------------------------------
答案 0 :(得分:1)
您可以使用EXISTS
:
SELECT CountryOfResidence , COUNT(*)
FROM Family AS f
WHERE EXISTS (SELECT 1
FROM Person AS p
WHERE f.ID = p.FamilyID AND Year(DOB) < 1970)
GROUP BY CountryOfResidence
答案 1 :(得分:1)
使用COUNT(DISTINCT Family.ID)
,这样您就不会计算因连接而产生的所有重复项。
SELECT
f.CountryOfResidence AS country,
COUNT(DISTINCT f.ID) AS family_count_per_country
FROM Family AS f
INNER JOIN Person as p
ON f.ID = p.FamilyID
WHERE p.DOB < '1970-01-01'
GROUP BY country
答案 2 :(得分:0)
没理由你不能在这里使用JOIN。虽然让一个居住国家与一个家庭而不是一个人联系在一起,但这对我来说似乎很奇怪。
SELECT
f.CountryOfResidence AS country,
COUNT(f.ID) AS family_count_per_country
FROM Family AS f
INNER JOIN Person as p
ON f.ID = p.FamilyID
WHERE p.DOB < '1970-01-01'
GROUP BY country