『壹』 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班
*/