如何将SQL查询中计算前top n%的数据转换为长尾?

2026-04-11 05:300阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计888个文字,预计阅读时间需要4分钟。

如何将SQL查询中计算前top n%的数据转换为长尾?

背景+实际工作中经常遇到的需求top10或top10%的需求,下面针对这些情况做一个小小的总结。

实现代码+先来说说top+n这种情况,这是比较常见的需求,通常涉及排序需求。我们可以使用窗口函数来解决。

常见需求:

1.查询每个部门员工工资排名前3的记录。

2.查询每个季度销售额排名前5的记录。

3.查询每个城市订单数量排名前10的记录。

实现代码示例:

sql

-- 查询每个部门员工工资排名前3的记录SELECT employee_id, department_id, salary, ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rankFROM employees;

-- 查询每个季度销售额排名前5的记录SELECT quarter, product_id, sales_amount, ROW_NUMBER() OVER (PARTITION BY quarter ORDER BY sales_amount DESC) AS rankFROM sales;

-- 查询每个城市订单数量排名前10的记录SELECT city, order_id, order_quantity, ROW_NUMBER() OVER (PARTITION BY city ORDER BY order_quantity DESC) AS rankFROM orders;

使用窗口函数ROW_NUMBER()可以根据指定列的值对数据进行排序,并为每个分区中的行分配一个唯一的序号。

阅读全文

本文共计888个文字,预计阅读时间需要4分钟。

如何将SQL查询中计算前top n%的数据转换为长尾?

背景+实际工作中经常遇到的需求top10或top10%的需求,下面针对这些情况做一个小小的总结。

实现代码+先来说说top+n这种情况,这是比较常见的需求,通常涉及排序需求。我们可以使用窗口函数来解决。

常见需求:

1.查询每个部门员工工资排名前3的记录。

2.查询每个季度销售额排名前5的记录。

3.查询每个城市订单数量排名前10的记录。

实现代码示例:

sql

-- 查询每个部门员工工资排名前3的记录SELECT employee_id, department_id, salary, ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rankFROM employees;

-- 查询每个季度销售额排名前5的记录SELECT quarter, product_id, sales_amount, ROW_NUMBER() OVER (PARTITION BY quarter ORDER BY sales_amount DESC) AS rankFROM sales;

-- 查询每个城市订单数量排名前10的记录SELECT city, order_id, order_quantity, ROW_NUMBER() OVER (PARTITION BY city ORDER BY order_quantity DESC) AS rankFROM orders;

使用窗口函数ROW_NUMBER()可以根据指定列的值对数据进行排序,并为每个分区中的行分配一个唯一的序号。

阅读全文