SQL语句:查询各班成绩前3的同学姓名

snoclassidnamescore1111a901123b911132c801141d891152e791161f871172g971183h981193i46120... sno classid name score
111 1 a 90
112 3 b 91
113 2 c 80
114 1 d 89
115 2 e 79
116 1 f 87
117 2 g 97
118 3 h 98
119 3 i 46
120 2 j 75
121 3 k 78
122 1 l 99
123 1 m 98
124 3 n 76
125 2 o 45
126 3 p 67
127 1 q 87
128 2 x 77

如何查出各班成绩前三同学的信息 按降序
展开
 我来答
badkano
2015-10-02 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144777 获赞数:885359
团长

向TA提问 私信TA
展开全部

可以用row_number函数来解决。

1、创建测试表,插入数据:

create table sc
(id int,
name varchar(20),
class varchar(20),
score int);

insert into sc values (1,'badkano','一年一班',100)
insert into sc values (2,'百度知道团长','一年一班',99)
insert into sc values (3,'du小短','一年一班',95)
insert into sc values (4,'du小小动','一年一班',97)
insert into sc values (5,'du小智','一年一班',80)
insert into sc values (6,'吕布','一年二班',67)
insert into sc values (7,'赵云','一年二班',90)
insert into sc values (8,'典韦','一年二班',89)
insert into sc values (9,'关羽','一年二班',70)
insert into sc values (10,'马超','一年二班',98)

2、查询每个班级的前三名,可用语句:

select * from
(select row_number() over (partition by class order by score desc) 排名,* from sc) t
where 排名<=3 order by class asc,score desc

3、结果截图:

熊熊说电竞
2018-08-11 · TA获得超过3287个赞
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部

分析如下:

可以用row_number函数来解决。

1、创建测试表,插入数据:

2、查询每个班级的前三名,可用语句:

3、结果截图:

拓展资料

(1)结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

(2)ql 语句就是对数据库进行操作的一种语言。

(3)更新:update table1 set field1=value1 where 范围。

(4)查找:select * from table1 where field1 like ’%value1%’ (所有包含‘value1’这个模式的字符串)。

(5)排序:select * from table1 order by field1,field2 [desc]。

(6)求和:select sum(field1) as sumvalue from table1。

(7)平均:select avg(field1) as avgvalue from table1。

(8)最大:select max(field1) as maxvalue from table1。

(9)最小:select min(field1) as minvalue from table1[separator]。

(资料来源:百度百科:SQL语句

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
de...2@163.com
2009-09-13 · TA获得超过1160个赞
知道小有建树答主
回答量:248
采纳率:0%
帮助的人:214万
展开全部
select * from tablename a where score in ( select top 3 score from tablename b where a.classid=b.classid order by score desc);
你的意思是这样吧!希望对你有所帮助。想了下!自己顺便思考学习下!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shutao917
2009-09-13 · TA获得超过1213个赞
知道大有可为答主
回答量:2199
采纳率:0%
帮助的人:3103万
展开全部
select sno,classid,name,score,row_number over(partition by classid order by score) rn from 表
where rn>4
order by name desc
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
纯乐我0G
2009-09-13
知道答主
回答量:40
采纳率:0%
帮助的人:37.4万
展开全部
select * from table order by score desc limit 0,3;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式