如何将COUNT和GROUP BY用于多个表?

时间:2017-09-21 16:39:54

标签: sql group-by count

我的架构中有两个表 - 房屋和城市。如何使用COUNT和GROUP BY确定每个城市的房屋数量?

Houses:
CityID
HouseNumber
StreetName

Cities:
CityID
CityName
Population

请注意:Houses.CityID是Cities.CityID的外键。感谢

预期产出:

City         Number of houses
London       50000000
NYC          30000000
Tokyo        40000000



SELECT CityName, count(*) as City
FROM Cities
GROUP BY CityName

4 个答案:

答案 0 :(得分:0)

使用JOIN通过City / CityName合并两个表。您还需要GROUP BY此列。

SELECT t2.CityName, count(t1.*) 
FROM Houses t1 
JOIN Cities t2 
   ON t1.CityID = t2.CityID
GROUP BY t1.City

我使用了表名别名t1t2来使示例显而易见。

答案 1 :(得分:0)

PK&外键我们知道,在城市中,CityID必须是唯一的 我们在房屋中知道CityID是城市的1-M。并且城市中的任何CityID必须存在于城市中。因此,我们不必担心拼写错误,不同的外壳等。

因此,我们选择名称并通过联接计算房屋数量。我们将C.CityID添加到组中,因为cityName可能不是唯一的,我们不希望合并两个Springfield。因此我们需要按CityID分组。

SELECT c.CityName, count(H.*)  as Number_of_Houses
FROM Cities C
INNER JOIN Houses H 
 on C.CityID = H.CityID
GROUP BY C.CityID, C.CityName

答案 2 :(得分:0)

试试这个

Select Cities.CityName, count(Houses.*) From Houses inner join Cities on Cities.CityName=Houses.City group by Houses.City

答案 3 :(得分:0)

select cities.cityName, count(houseNumber) as NumberofHouses
from Houses inner join cities on (houses.city = cities.cityName)
group by cityname;