SQLite基于Chinook数据库两条子查询SumOfUnitPrice结果不一致问题咨询
问题成因
两条查询结果不一致的核心原因是第二条查询的求和子查询未关联外层表字段:
- 查询1逻辑正确:先筛选出Audioslave乐队对应的所有专辑ID,再按专辑ID分组统计每一张专辑下所有曲目的单价总和,得到的SumOfUnitPrice是对应专辑的真实汇总值。
- 查询2逻辑错误:放在
SELECT后的求和子查询没有和外层的albums.albumid做关联,该子查询单独执行会返回3行结果(即查询1输出的3个汇总值)。而SQLite规则中,如果将返回多行的子查询作为单个字段输出,会默认只取第一行的结果(也就是第一个专辑ID10对应的13.86)。外层遍历3个符合条件的专辑时,每次都取到了子查询第一行的固定值13.86,自然所有行的汇总值都显示错误。
如果要修正查询2得到和查询1一致的结果,需要把求和子查询改为关联子查询,修改后代码参考:
select albums.albumid, ( select sum(tracks.unitprice) from tracks where tracks.albumid = albums.albumid ) as SumOfUnitPrice from albums where albums.artistid in ( select artists.ArtistId from artists where artists.Name = "Audioslave" )
修改后逻辑为:外层每遍历到一个专辑ID,内层子查询就只统计该专辑ID对应的曲目单价总和,即可得到正确结果。
内容的提问来源于stack exchange,提问作者Mohammad Ali Dastgheib
相关产品推荐
相关产品推荐

