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

采购类别客户订货总额密封材料a1141密封材料a22242密封材料a3124纱窗b1490纱窗b2585纱窗b345五金配件d1540五金配件d254五金配件d3645如... 采购类别 客户 订货总额
密封材料 a1 141
密封材料 a2 2242
密封材料 a3 124
纱窗 b1 490
纱窗 b2 585
纱窗 b3 45
五金配件 d1 540
五金配件 d2 54
五金配件 d3 645
如何用一条sql语句每个分类的前2条记录
展开
 我来答
tj_angela
推荐于2018-03-29 · TA获得超过7530个赞
知道大有可为答主
回答量:6797
采纳率:75%
帮助的人:2567万
展开全部

首先,该问题对应的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

突击手觅患
推荐于2017-11-22 · TA获得超过962个赞
知道小有建树答主
回答量:240
采纳率:0%
帮助的人:296万
展开全部
先默认你的数据已经分组合并过了。
这里你说的前2条也没说明是按什么排名的,姑且当你按订货总额由高到低吧。
select 采购类别,客户,订货总额
from
(select row_number() over(partition by 采购类别 order by 订货总额 desc) rn,采购类别,客户,订货总额 from 表或查询) a
where rn<3
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式