在MySQL中,sum()函数内是无法进行子查询的,虽然语法检查不报错,但不会有运行结果。解决方法是改用联表查询。
关系如下:
有City城市表和Spot景点表,为一对多关系,cityId是Spot内的外键。
需求如下:根据每个景点Spot的购票数汇总每个城市的购票数。
首先应该先查询每个城市的景点再求和,分组。
错误写法:
select City.cName,
SUM(select Spot.sPurchasedNumber from Spot inner join City on City.cId=Spot.cId)
as cPurchasedSum
from City
GROUP BY City.cName
order by cPurchasedSum desc
,City.cityName asc limit 4
;
-- 不报错但运行无结果
正确写法:
select City.cName,
SUM(Spot.sPurchasedNumber) as cPurchasedSum
from City
left join Spot on Spot.cId = City.cId
GROUP BY City.cName
order by cPurchasedSum desc
,City.cityName asc limit 4
;
另外,必须有group by语句,否则只显示第一个City的名字和所有Spot的sPurchasedNumber的和。(注:使用的可视化GUI工具为DBeaver)