一个简单的方法就是排序之后给它分配序号,根据序号去找前几条
select *
from (select 公司,人数,
--按人数从多到少分配序号,不同公司会重1开始
rank() over (partition by 公司 order by 人数 desc) as xh
from 公司档案) as A
where xh<=2 --取前几位就写几
order by 公司,人数 desc
排序效果如下
最终让序号<=2,也就是取人数最多的前两个的效果如下
例如 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
select top 5 字段1,字段2 ,sum(计算字段) from 查表 where 查询条件
gourp by 字段1 ,字段2
order by 字段1 ,字段2
注:top 5 表示显示前5条,根据实际情况修改