oracle中的sql求总分前三名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中的sql求总分前三名相关的知识,希望对你有一定的参考价值。

Student表有三列,分别是姓名、课程、成绩
Name Curricula Mark
张三 语文 70
李四 数学 80
王朝 英语 59
城南 马哲 70
王朝 语文 90
查询出总分排名前三的学员名字?

可以用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);
commit;

2、查询分数的前三名,可用以下语句:

select * from 
(select row_number() over (order by score desc) rn,sc.* from sc)
where rn<=3;

3、结果显示:

参考技术A --分析函数(排位函数)
rank() 相同的值排位相同,序号跳跃
row_number() 相同的值排位不相同,序号连续
dense_rank() 想同的值排位相同,序号连续
--语法
rank() over (order by 字段名 desc)
例子:select 姓名,课程,成绩,rank() over (order by sal desc) as ‘排名'
from Student;--你会发现后面多了一列序列,然后怎么实现就自己动脑子吧
参考技术B select name
from (
select *
from (select name,sum(mark) as zongfen from student group by name ) k
order by zongfen desc ) z
where rownum<=3;本回答被提问者采纳
参考技术C 不是一科而已吗?怎么总分?

sql 185.部门前三名薪水.sql

# Write your MySQL query statement below

SELECT D.Name AS Department, A.Name AS Employee, A.Salary AS Salary
FROM Department AS D, Employee AS A
WHERE (SELECT COUNT(DISTINCT(B.Salary)) AS RANK
FROM Employee AS B
WHERE B.Salary >= A.Salary and A.DepartmentId = B.DepartmentId) <= 3 AND A.DepartmentId = D.Id
ORDER BY A.DepartmentId, A.Salary DESC;

以上是关于oracle中的sql求总分前三名的主要内容,如果未能解决你的问题,请参考以下文章

SQL难题:查询所有学科成绩都不及格的和总分排名前三名的

用sql语句,查询每个班级成绩排名前三名的学生姓名

用sql语句,查询每个班级成绩排名前三名的学生姓名

sql server查询总分最高学生信息

一句话从 Oracle 取每组前三名

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