如何使用子查询中的rank函数筛选总销售额最高的seller_id
正确实现SQL
你编写的初始子查询存在两处逻辑问题:
RANK()窗口函数的排序依据使用了原始字段price,不是聚合后的总销售额,排名逻辑错误- 子查询未返回
seller_id字段,外层查询无法提取该字段
完整可运行SQL如下:
SELECT seller_id FROM ( SELECT seller_id, SUM(price) AS total_sales, RANK() OVER (ORDER BY SUM(price) DESC) AS sales_rank FROM sales GROUP BY seller_id ) AS sales_stat WHERE sales_rank = 1;
逻辑说明
- 内层子查询先按
seller_id分组,计算每个卖家的累计销售额,同时用RANK()对累计销售额降序排名,相同销售额的卖家会获得相同排名 - 外层查询过滤排名为1的记录,仅返回
seller_id字段,即可得到所有总销售额并列最高的卖家ID
如果表中price字段为商品单价,总销售额需要按「单价×销量」计算,只需将语句中的SUM(price)替换为SUM(price * quantity)即可。
内容的提问来源于stack exchange,提问作者glor
相关产品推荐
相关产品推荐

