Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何对多个表使用计数和分组依据?_Sql_Group By_Count - Fatal编程技术网

Sql 如何对多个表使用计数和分组依据?

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

在我的模式中有两个表-房屋和城市。我如何使用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

使用
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;