前文总结了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。


原创文章,欢迎转载,转载请注明出处并留下原文链接。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注