当前位置:首页 » 编程语言 » sql分组排序后取每组前三
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql分组排序后取每组前三

发布时间: 2022-05-31 13:30:30

sql取出每个分组的前几条

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

select*

from(select公司,人数,

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

rank()over(partitionby公司orderby人数desc)asxh

from公司档案)asA

wherexh<=2--取前几位就写几

orderby公司,人数desc

排序效果如下

② SQL怎么取出每个科目前三名并按科目和分组排列

select B1.姓名,B1.科目,B1.分数 from B B1 where(select count(1) from B where 科目=B1.科目 and 分数〉=B1.分数)〈=3 order by B1.科目,B1.分数;

③ Mysql 分组以后取每组的前三名数据

Try this one,should be fine
下面这个已经有排序了哦,不行么?

SELECT uid, group_concat(subject)
FROM (SELECT id, uid, subject
FROM (SELECT id, uid, subject,
(SELECT COUNT(*)
FROM t_subject
WHERE uid = t.uid
AND subject <= t.subject) RK
FROM t_subject t) t1
WHERE rk <= 3) t2
GROUP BY uid

多了个a.原来
或者你直接用个substring()得了。。。

④ SQL语句 怎样按排序后显示前三个

没有看到你的数据库conn连接啊:
@$conn = mysql_connect("yourHost","yourUserID","yourPassword");

$sql=mysql_query("select top 3 title from art_title join art_neirong on art_title.no=art_neirong.no order by last_update DESC;",$conn);
//echo $sql;
$i=0;
while($result=mysql_fetch_array($sql))
{
echo "<h5>".$result['title']."</h5>;
}
mysql_close($conn);

⑤ sql 怎么先分组再查询每组中前三天数据

SELECT TEST1.STUDENTNAME, TEST1.SCORE, TEST1.CLASS
FROM (SELECT STUDENTNAME,
SCORE,
CLASS,
ROW_NUMBER() OVER(PARTITION BY CLASS ORDER BY CLASS, SCORE DESC) ROW_NUM
FROM TABLE_NAME) TEST1
WHERE TEST1.ROW_NUM <= 3
ORDER BY TEST1.CLASS, TEST1.STUDENTNAME
看看是不是你要的,这用到了分组排序编号

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

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

⑦ SQL如何对分组后的结果进行排序并且取前几名

SQL取分组中的前几名

[sql] www.2cto.com
create table #aa(class varchar(10),name varchar(10),lang int,math int)
go

insert into #aa
select '1','a1',60,70
union all
select '1','a2',80,70
union all
select '1','a3',90,70
union all
select '1','a4',50,70
go

insert into #aa
select '2','b1',60,70
union all
select '2','b2',90,90
union all
select '2','b3',90,70
union all
select '2','b4',50,70

go

select * from #aa

--取每年级前一名的成级
select * from
(select ROW_NUMBER() over(partition by class order by lang+math desc) rr, * from #aa ) a
where rr<2
--取每年级前二名的成级
select * from
(select ROW_NUMBER() over(partition by class order by lang+math desc) rr, * from #aa ) a
where rr<3

⑧ 数据库排序并且取每个分组的前三条

select
*
from
(
select
row_number()
over(partition
by
'分组'
order
by
'日期')
as
rownum
--
排序并分组
,
*
--
所需显示的字段
from

)
as
t
where
t.rownum
=
1
对每组的数据按日期排序并加上行号
取出时只取行号为1,也就是第一条数据。

⑨ MYSQL 中,如果提取分组排序后的第三条数据和前三条意外的所有数据

在select语句后面加上limit就行了。

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)。


如提取第三条记录:

select*fromtestlimit1,1;

提取除了前三条以外的所有数据:

select*fromtestlimit2,-1,
--为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为-1:

⑩ mysql分组后,取每组的前3条数据(并且有顺序)

不列出表结构及测试数据,只能这样大概写个思路了:

select a.*
from
(
select t1.*,(select count(*)+1 from 表 where 分组字段=t1.分组字段 and 排序字段<t1.排序字段) as group_id
from 表 t1
) a
where a.group_id<=3