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

sql分组取前两名

发布时间: 2022-06-23 04:33:58

1. sql分组 取 前两项,求注解

首先你这个查询是不对的,后边的ORDER BY JE应该是ORDER BY JE DESC。
可以看出,查询出的结果都是按照qu字段的je从大到小的顺序的前两行,如果你不修改,那么是从小到大的前两行,完全是不同的结果。

如果把子查询的a.qu改成A或者B这些,我想您是可以理解的吧?
这个就是把上边主查询a表的qu字段传进去了而已。
你可以这么想,先把hard也就是a表的数据全部检索出来,然后在根据where条件进行筛选。
然后where是什么,是把a的qu列传进去,那么这么多qu列每个传进去都会有一个结果,最终传进去的是4个A,3个C,3个B,这样你就可以把子查询里面的a.qu换成实际的值理解了,对于这几个,得到的结果,其实就是分别每个qu在表中按照je从大到小排序的前两行的je值。也就是in里面的最终结合。

2. mysql分组 排序 取前2条

你可以试试这个,有疑问可HI我。
select * from table a
where
(select count(1) from table b
where a.channel_id=b.channel_id and a.time<b.time)<2
order by channel_id,time desc

具体原理可参看我空 间的文章
SQL分类下的《取得分组TOP-N测试表与测试数据》

3. 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

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

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

5. 如何在mysql中查询每个分组的前几名

可以使用集中方法去解决“每个分组中最大的条目”,这类问题已经进一步扩展到查询每组中前N个条目的方法。之后我们深入探讨了一些MySQL特定的技术,这些技术看起来有一些傻和笨。但是如果你需要榨干服务器的最后一点性能,你就需要知道什么时候去打破规则。对于那些认为这是MySQL本身的问题的人,我要说这不是,我曾经看到过使用其他平台的人也在做着同样的事情,如SQL Server。在每个平台上都会有很多特殊的小技巧和花招,使用他们的人必须去适应它。

6. sql 分组取每组的前几条数据 怎么做

select * from 表名 a where exists (select top 2 * from
(select a,a1,a2 from 表名 group by a,a2) b where a.a=b.a and a.a2=b.a2)

7. SQL 查询各门成绩前两名的学生

你先抽一条数据来反过来理解这条SQL

比如 你表格里的第一条:陈六、政治

SQL里的子句你把t.subject 替换成 我们这条数据真实的值,就可以看出来

select top 2 stu_id from stu_score where subject='政治' order by score desc

就是查询我当前这条记录对应的subject(政治)里,成绩最高的两条数据的 stu_id。


我再提供一种写法给你

select*from(
selectt1.*,row_number()over()asfidfromstu_score)wherefid<=2

这种写法主要是row_number() over(partition by subject order by score desc),

意思是:我按照subject 分组,根据score排序从大到小,分别标出序号fid。也就是我把不同subject的成绩按从大到小排序,然后外层再取各自的前两名

8. sql 分组查询 分组查询查询每组的前几条数据

sqlserver:
select * from (
select *,row_number() over(partition by 分组列 order by 组内排序列) as rn from table
) as a where rn<=2

9. sql取出每个分组的前几条

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

select*

from(select公司,人数,

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

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

from公司档案)asA

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

orderby公司,人数desc

排序效果如下

10. sql分组后再取前两位的值

--在这条语句加一个词desc(表示从大到小排序,不加默认的asc是从小到大)
selecttop2jefromhardbwherea.qu=b.quorderbyjedesc