sql取出每个分组的前几条
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql取出每个分组的前几条相关的知识,希望对你有一定的参考价值。
一个简单的方法就是排序之后给它分配序号,根据序号去找前几条
select *
from (select 公司,人数,
--按人数从多到少分配序号,不同公司会重1开始
rank() over (partition by 公司 order by 人数 desc) as xh
from 公司档案) as A
where xh<=2 --取前几位就写几
order by 公司,人数 desc
排序效果如下
最终让序号<=2,也就是取人数最多的前两个的效果如下
参考技术A例如 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
参考技术B select top 5 字段1,字段2 ,sum(计算字段) from 查表 where 查询条件gourp by 字段1 ,字段2
order by 字段1 ,字段2
注:top 5 表示显示前5条,根据实际情况修改
SQL中显示查询结果的前几条记录
在使用数据库查询语句的过程中,我们经常需要返回查询结果的前几条或者中间几条数据,下面是我总结的几种数据库常用的方法:(table是数据库表名,table2是table表的别名)
1、SQLServer
sqlserver支持top关键字,返回前若干条数据。
select top 5 * from table;// 返回前5行数据
2、MySQL
mysql支持limit,只能适用于mysql。limit子句用于强制select语句返回置顶的记录数,接受一个或两个数字参数,必须是整数常量。一个参数是返回前几条记录;两个参数时,第一个参数指定第一个返回记录行的偏移量(初始记录行的偏移量是0),第二个参数指定返回记录的最大数目。
一个参数:
select * from table limit 10; //返回前10行记录
两个参数:
select * from table limit 5,10; //返回第6-15行的记录
select * from table limit 5,-1; //返回第6行到最后一行的记录 (从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1)
select * from table limit 0,10 //返回前10行记录,和limit10的结果一样,即limit0,n=limit n
3、Oracle
Oracle需要使用rownum。
select * from table where rownum<=5; //返回前5条数据
4、DB2
select * from table fetch first 5 rows only; //返回前5条数据
select * from (select 列名1,列名2,row_number() over() as a from table) as table2 where a>=5 and a<=10;//返回第5行到第10行的数据
以上是关于sql取出每个分组的前几条的主要内容,如果未能解决你的问题,请参考以下文章