sql分组统计后分别显示前几条记录

2024年12月02日 17:47
有2个网友回答
网友(1):

首先,该问题对应的SQL如下

select 采购类别,客户,订货总额

from (select 采购类别,客户,订货总额,

row_number() over(partition by 采购类别 order by 订货总额 desc) rn

from table_name) a
where rn<=2

;

其次,常用数据库比如Oracle和Sqlserver都有特定函数完成分组排序的功能,如果需要显示并列的情况可以用下面另外的2个.

分别有3个类似函数:

  1. row_number() over

    这个函数不需要考虑是否并列,哪怕根据条件查询出来的数值相同也会进行连续排名。也是最常用的函数,排序结果类似于1,2,3,4,5

  2. rank() over

    查出指定条件后进行一个排名,但是有一个特点。假如是对学生排名,那么实用这个函数,成绩相同的两名是并列。排序结果类似于1,2,2,4,5

  3. dense_rank() over

    比较特殊,排序结果类似于1,2,2,3,4

网友(2):

先默认你的数据已经分组合并过了。
这里你说的前2条也没说明是按什么排名的,姑且当你按订货总额由高到低吧。
select 采购类别,客户,订货总额
from
(select row_number() over(partition by 采购类别 order by 订货总额 desc) rn,采购类别,客户,订货总额 from 表或查询) a
where rn<3