可以用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、结果截图:
分析如下:
可以用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语句)
select * from tablename a where score in ( select top 3 score from tablename b where a.classid=b.classid order by score desc);
你的意思是这样吧!希望对你有所帮助。想了下!自己顺便思考学习下!
select sno,classid,name,score,row_number over(partition by classid order by score) rn from 表
where rn>4
order by name desc
select * from table order by score desc limit 0,3;