每个产品的顶级评论客户SQL查询错误排查
问题分析:找出每个产品最高评分客户的SQL错误排查
需求回顾
需要从playground.product_reviews表中查询每个产品对应的:
- 最高
review_score的客户 - 若评分相同,取
helpful_votes最多的客户
输出列包含product_id、customer_id、review_score、helpful_votes,并按product_id升序排列。
原SQL的错误点
你的SQL存在两个核心问题:
- 分区字段错误:
PARTITION BY customer_id是按客户分组,但需求是按产品分组(每个产品下找最优记录),应该改为PARTITION BY product_id。 - 排序方向错误:
order by review_score默认是升序(从小到大),导致最低评分被排为第1位。需要给review_score加上desc,让最高分优先排序。
修正后的SQL
WITH Ordered_Data AS ( SELECT product_id, customer_id, review_score, helpful_votes, RANK() OVER ( PARTITION BY product_id ORDER BY review_score DESC, helpful_votes DESC ) AS r FROM playground.product_reviews ) SELECT product_id, customer_id, review_score, helpful_votes FROM Ordered_Data WHERE r = 1 ORDER BY product_id ASC;
逻辑说明
- 按
product_id分区,确保每个产品单独计算排名 - 先按
review_score降序排序,优先取最高分;评分相同时,按helpful_votes降序取票数最多的记录 - 用
RANK()函数可以处理同分数同票数的并列情况(若需要唯一结果,可改用ROW_NUMBER(),但需额外指定排序字段如review_date)
内容的提问来源于stack exchange,提问作者user28577345
相关产品推荐
相关产品推荐

