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

来源:百度知道 编辑:UC知道 时间:2024/07/02 01:59:42
采购类别 客户 订货总额
密封材料 a1 141
密封材料 a2 2242
密封材料 a3 124
纱窗 b1 490
纱窗 b2 585
纱窗 b3 45
五金配件 d1 540
五金配件 d2 54
五金配件 d3 645
如何用一条sql语句每个分类的前2条记录

首先,该问题对应的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条也没说明是按什么排名的,姑且当你按订货总额由高到低吧。
select 采购类别,客户,订货总额
from
(select row_number() over(partition by 采购类别 order by 订货总额 desc) rn,采购类别,客户,订货总额 from 表或查询) a
where rn<3