sql取出每个分组的前几条

如题所述

一个简单的方法就是排序之后给它分配序号,根据序号去找前几条

select * 

  from (select 公司,人数,

--按人数从多到少分配序号,不同公司会重1开始

           rank() over (partition by 公司 order by 人数 desc) as xh  

          from 公司档案) as A

 where xh<=2  --取前几位就写几

 order by 公司,人数 desc

排序效果如下

排序效果

最终让序号<=2,也就是取人数最多的前两个的效果如下

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-09-25

例如 score表 (科目,姓名,分数),取每科分数的前5名:


SELECT

a.科目,a.姓名,a.分数,COUNT(b.科目)

FROM  score  a

LEFT JOIN score  b 

ON  a.科目= b.科目  AND  a.分数 <= b.分数 

GROUP BY   a.科目,a.分数

HAVING  count( b.科目) <= 5 

第2个回答  2018-06-07
select top 5 字段1,字段2 ,sum(计算字段) from 查表 where 查询条件
gourp by 字段1 ,字段2
order by 字段1 ,字段2
注:top 5 表示显示前5条,根据实际情况修改本回答被网友采纳