‘壹’ sql怎么取出每个科目前三名并按科目和分组排列
select B1.姓名,B1.科目,B1.分数 from B B1 where(select count(1) from B where 科目=B1.科目 and 分数〉=B1.分数)〈=3 order by B1.科目,B1.分数;
‘贰’ SQL难题:查询所有学科成绩都不及格的和总分排名前三名的
1、都不及格:
select
a.name,a.lesson,a.score
from
test
a,
(select
name,count(lesson)
as
cl
from
test
group
by
name)
b,
(select
name,count(lesson)
as
cl
from
test
where
score
<
60
group
by
name)
c
where
a.name=b.name
and
a.name=c.name
and
b.cl=c.cl
2、总分前三:(不太合理,学科不一样,靠得越多,总分越高,业务需求有问题)
select
top
3
name,sum(score)
as
总分
from
test
gropu
by
name
order
by
2
回答者:
shaoshuai_bd
-
经理
五级
10-22
12:36
第二道题,二楼的写法是sql
server的写法,在oracle中是不能执行的,下面是
oracle中的写法
select
*
from
(
select
name,sum(score)
as
z
from
a
group
by
name
order
by
z
desc)
where
rownum<=2
‘叁’ SQL语句如何查询成绩的前三名带成绩重复的
select * from table where 成绩 in (select top 3 distinct 成绩 from table order by 成绩 desc) order by 成绩 desc
下面这个效率要高点
select * from table where 成绩 >= (select min(成绩) from(select top 3 distinct 成绩 from table)) order by 成绩 desc
‘肆’ 用SQL选出每个人成绩的最高的前三条纪录
--用开窗函数每个用户成绩排序
select*from
(selectt.*,row_number(partitionby用户名orderby成绩desc)asflagfrom表名t)
whereflag<=3
‘伍’ oracle中的sql求总分前三名
可以用row_number来查询。
1、创建数据表,插入数据:
createtablesc
(idint,
namevarchar(20),
classvarchar(20),
scoreint);
insertintoscvalues(1,'badkano','一年一班',100);
insertintoscvalues(2,'网络知道团长','一年一班',99);
insertintoscvalues(3,'小短','一年一班',95);
insertintoscvalues(4,'小小动','一年一班',97);
insertintoscvalues(5,'小智','一年一班',80);
insertintoscvalues(6,'吕布','一年二班',67);
insertintoscvalues(7,'赵云','一年二班',90);
insertintoscvalues(8,'典韦','一年二班',89);
insertintoscvalues(9,'关羽','一年二班',70);
insertintoscvalues(10,'马超','一年二班',98);
commit;
2、查询分数的前三名,可用以下语句:
select*from
(selectrow_number()over(orderbyscoredesc)rn,sc.*fromsc)
wherern<=3;
3、结果显示:
‘陆’ 找出前三条学生记录的学生姓名, 专业,出生日期用SQL怎么写
前三条记录,是按什么排序,如果不需要按字段排序只要3条的话,可以这样:
select 学生姓名,专业,出生日期 from table limit 3
注意获取字段名称和表名称根据你表的名称修改,逗号是英文逗号
如果需要根据某字段排序的话,假如是id,可以这样:
select 学生姓名,专业,出生日期 from table order by id limit 3
‘柒’ sql语句 每科成绩的前三名
可以用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,'小短','一年一班',95)
insert into sc values (4,'小小动','一年一班',97)
insert into sc values (5,'小智','一年一班',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
‘捌’ SQL语句:十个班里各取前五名
--创建测试数据
declare @t table(ID int,xm varchar(20),total int,banji varchar(50))
insert @t
select 1,'张一',100,'A班' union all
select 2,'张二',200,'A班' union all
select 3,'张三',300,'A班' union all
select 4,'张四',400,'A班' union all
select 5,'张五',500,'B班' union all
select 6,'张六',600,'B班' union all
select 7,'张七',700,'B班' union all
select 8,'张八',800,'B班' union all
select 9,'张九',900,'C班' union all
select 10,'张十',1000,'C班' union all
select 11,'张十一',1100,'C班' union all
select 12,'张十二',1200,'C班'
--查询
select * from @t a
where (select count(*) from @t b where b.banji = a.banji and b.total > a.total) < 3
--这里是前三名,前五名只需把这里的<3改为<5即可
--结果
/*
ID xm total banji
---------------------------------------------
2 张二 200 A班
3 张三 300 A班
4 张四 400 A班
6 张六 600 B班
7 张七 700 B班
8 张八 800 B班
10 张十 1000 C班
11 张十一 1100 C班
12 张十二 1200 C班
*/