SQL-经典的TOP N问题
前文总结了SQL连续登录问题,本文继续总结经典的 SQL TOP N 问题,TOP N问题虽然比较简单,但其应用场景并不少,比如列出最受欢迎的TOP 10产品(销售额或者销售量排名前10的产品)、每个产品大类中销售额排名前10的子产品。下面就来看看具体实例:
假设我们已有如下销售汇总表sales:
示例代码1:
--取所有产品中销售额排名前3的产品 select category, product, amount from sales order by 3 desc limit 3;
代码结果1:
示例代码2:
--取每个品类下销售额排名前3的产品 with tmp as ( select category, product, amount, row_number() over (partition by category order by amount desc) as rank_no from sales ) select category, product, amount, rank_no from tmp where rank_no <= 3 order by 1,4;
代码结果2:
以上就是 SQL TOP N 问题的实现,示例代码1使用降序排序+limit实现,示例代码2使用窗口函数分组降序排序实现,当存在数值相同的情况,示例代码2中的row_number()可以替换成dense_rank()。
虽然TOP N只是描述性统计,但其应用场景并不少,诸如产品偏好、客户来源、渠道质量等分析可能都会用到TOP N。
原创文章,欢迎转载,转载请注明出处并留下原文链接。