- **为什么需要子查询(sub)?**
在SQL中,窗口函数(如`ROW_NUMBER()`)会为每一行计算一个值(这里是为每个月每首歌计算一个排名)。但是,我们不能在同一个SELECT语句的WHERE子句中直接使用这个窗口函数的结果(因为执行顺序:WHERE在窗口函数之前执行)。所以,我们需要将窗口函数放在子查询中,然后在外部查询中过滤(`WHERE sub.ranking <= 3`)。
- **GROUP BY的作用**:将数据按指定字段分组,然后对每个组应用聚合函数(如COUNT(*))。SELECT子句中出现的非聚合字段,必须出现在GROUP BY子句中(或使用聚合函数包裹)。所以这里的song_name必须出现在group by子句当中
在SQL中,窗口函数(如`ROW_NUMBER()`)会为每一行计算一个值(这里是为每个月每首歌计算一个排名)。但是,我们不能在同一个SELECT语句的WHERE子句中直接使用这个窗口函数的结果(因为执行顺序:WHERE在窗口函数之前执行)。所以,我们需要将窗口函数放在子查询中,然后在外部查询中过滤(`WHERE sub.ranking <= 3`)。
- **GROUP BY的作用**:将数据按指定字段分组,然后对每个组应用聚合函数(如COUNT(*))。SELECT子句中出现的非聚合字段,必须出现在GROUP BY子句中(或使用聚合函数包裹)。所以这里的song_name必须出现在group by子句当中
我已经通过这道题!
https://gw-c.nowcoder.com/api/sparta/jump/link?link=https%3A%2F%2Fwww.nowcoder.com%2FquestionTerminal%2F4ab6d198ea8447fe9b6a1cad1f671503
全部评论
相关推荐