Sql 如何对多个表使用计数和分组依据?
在我的模式中有两个表-房屋和城市。我如何使用COUNT和GROUP BY确定每个城市的房屋数量Sql 如何对多个表使用计数和分组依据?,sql,group-by,count,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
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
使用
JOIN
通过City/CityName组合两个表。您还需要按此列对分组
SELECT t2.CityName, count(t1.*)
FROM Houses t1
JOIN Cities t2
ON t1.CityID = t2.CityID
GROUP BY t1.City
我使用了表名别名
t1
和t2
使示例更为明显。使用JOIN
通过City/CityName将两个表合并。您还需要按此列对分组
SELECT t2.CityName, count(t1.*)
FROM Houses t1
JOIN Cities t2
ON t1.CityID = t2.CityID
GROUP BY t1.City
我使用了表名别名
t1
和t2
使示例更为明显。对于PK和外键,我们知道城市ID必须是唯一的
我们知道,在房屋中,CityID是一个1-M的城市。任何住在房子里的城市都必须存在于城市中。因此,我们不需要担心拼写错误、大小写不同等
因此,我们选择名称并通过连接计算房屋数量。我们通过将C.CityID添加到组中,因为cityName可能不是唯一的,并且我们不希望合并两个Springfield。;因此,我们需要按城市ID分组
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
有了PK和外键,我们知道城市ID必须是独一无二的 我们知道,在房屋中,CityID是一个1-M的城市。任何住在房子里的城市都必须存在于城市中。因此,我们不需要担心拼写错误、大小写不同等 因此,我们选择名称并通过连接计算房屋数量。我们通过将C.CityID添加到组中,因为cityName可能不是唯一的,并且我们不希望合并两个Springfield。;因此,我们需要按城市ID分组
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
试试这个
选择Cities.CityName,计数(房屋。*)
从房屋内部连接城市上的城市。CityName=Houses.City
按房屋分组。城市
试试这个
select cities.cityName, count(houseNumber) as NumberofHouses
from Houses inner join cities on (houses.city = cities.cityName)
group by cityname;
选择Cities.CityName,计数(房屋。*)
从房屋内部连接城市上的城市。CityName=Houses.City
按房屋分组。城市
查看加入
很抱歉,如果没有链接,您将如何加入这两个表?我遗漏了什么吗?请看JOIN
对不起,如果没有链接,您将如何连接这两个表?我遗漏了什么吗?嗨,kixorz,我对t1和t2感到困惑。t1和t2是他为访问单个表而创建的别名/名称(从表中提取时比键入完整的表名更简单。另一种选择是Cities.CityName和count(Houses.*))在本例中,您应该注意,如果您的cityName在cities表中不存在;房屋数量将受到影响。此外,如果数据库区分大小写,那么计数也会受到影响。嗨,kixorz,我对t1和t2感到困惑。t1和t2是他为访问单个表而创建的别名/名称(从中提取时比键入完整表名更简单。另一种选择是Cities.CityName和count(Houses.*))在本例中,您应该注意,如果您的cityName在cities表中不存在;房屋数量将受到影响。此外,如果数据库区分大小写,那么计数也会受到影响。Hi@xQbert。我更新了问题,使两个表现在用外键链接。你能帮我解决这个问题吗,谢谢!:)你好@xQbert。我更新了问题,使两个表现在用外键链接。你能帮我解决这个问题吗,谢谢!:)
select cities.cityName, count(houseNumber) as NumberofHouses
from Houses inner join cities on (houses.city = cities.cityName)
group by cityname;