请求编写嵌套查询:找出播放量最高的前10张专辑
找出播放量最高的前10张专辑(简单嵌套查询版)
嘿,我来帮你把这个嵌套查询补全,而且尽量写得简单易懂,不用纠结性能优化哈!先理清楚咱们的表结构:
- Album表:存储专辑信息,字段有
GRid(专辑唯一标识)、Title(专辑名称) - AlbumTrack表:关联专辑和曲目,字段有
GRid(对应专辑的GRid)、ISRC(对应曲目的唯一标识) - Track表:存储曲目播放数据,字段有
ISRC(曲目唯一标识)、PlayCount(该曲目的播放量)
咱们的目标是找出播放量最高的前10张专辑,用嵌套查询的话,可以这么写:
SELECT TOP 10 Album.Title FROM Album WHERE Album.GRid IN ( -- 这一层用来筛选出总播放量前10的专辑GRid SELECT AlbumTrack.GRid FROM AlbumTrack GROUP BY AlbumTrack.GRid ORDER BY SUM( -- 最内层嵌套:获取当前ISRC对应的播放量 (SELECT Track.PlayCount FROM Track WHERE Track.ISRC = AlbumTrack.ISRC) ) DESC TOP 10 )
查询逻辑解释
- 最内层子查询:针对
AlbumTrack里的每一条曲目关联记录,找到它在Track表中对应的播放量 - 中间层子查询:把同一个专辑(同一个
GRid)下所有曲目的播放量加起来,然后按总播放量从高到低排序,取前10个专辑的GRid - 最外层查询:根据这些筛选出来的
GRid,从Album表中取出对应的专辑标题
这样写虽然因为嵌套子查询的原因效率不算最高,但逻辑非常直观,容易理解~
内容的提问来源于stack exchange,提问作者Sarah Painter
相关产品推荐
相关产品推荐

