MySql 查詢排名前10(包含並列)Sql

2021-10-12 02:12:41 字數 1616 閱讀 7261

今天乙個測試的朋友去面試,考察了她資料庫查詢的一些語法問題,但是一些細節她沒有考慮進去被刷下了。果然行業標準提高了啊。

貼一下筆試題目。

–1.學生表

student(sid,sname,sage,s***)

–sid 學生編號,sname 學生姓名,sage 出生年月,s*** 學生性別

–2.課程表

course(cid,cname,tid)

–cid 課程編號,cname 課程名稱

–3.成績表

sc(sid,cid,score)

–sid 學生編號,cid 課程編號,score 分數

完成如下查詢:

① 查詢即選了課程編號a又選了課程編號b的學生資訊

② 查詢所有學生的選課數量和總成績

③ 查詢課程編號a成績前十的學生資訊和對應的分數

④ 查詢選課熱度前三的課程資訊

⑤ 查詢每個學生的選課資訊

這題目大概大家都不陌生,但是說到查詢前多少名時很多人第一反應就是用 top,並沒有考慮不同資料庫是不一樣的而且並列排名也往往會忽略。

就此 ,我貼一下我的答案,寫的不好,希望多交流。

第1題

select * from student where sid in (

select sid from sc where cid in (a,b)

)

第2題

select sum(score),count(cid),s.sid ,sname from student s left join sc on s.sid = sc.sid   group by s.sid ,sname
第3題

-- orcal serversql 用 top 10

-- mysql

select * from (

select sid,cid, score,

@rank:= if(@pre=score, @rank+0, @rank+1) as rank,

@pre:= score

from sc ,

(select @rank:=0, @pre:= null) r

where cid = 2

order by score desc ) a left join student s on a.sid = s.sid where rank <= 10;

第4題

-- orcal server sql 用 top 

-- mysql

select * from (

select cid, count(cid) c_cid from sc group by cid

) a left join course c on a.cid = c.cid order by c_cid desc limit 10

第5題

select * from sc , course , student where sc.sid= student.sid and sc.cid=course.cid order by sc.sid

MySQL實現排名並查詢指定使用者排名功能

用到user 使用者表 說明 rownum rownum 1 中 是賦值的作用,這句話的意思是先執行 rownum 1,然後把值賦給 rownum select rownum 0 r 這句話的意思是設定rownum欄位的初始值為0,即編號從1開始。實現排名 第一步 先將使用者排序 並給與名次 sel...

查詢10天前的日誌並刪除

查詢10天前的日誌並刪除 bin bash source etc profile 刪除日誌 find usr local apache tomcat 7.0.68 logs type f mtime 10 exec rm rfv find usr local apache tomcat 8.0.32...

查詢10天前的日誌並刪除

查詢10天前的日誌並刪除 bin bash source etc profile 刪除日誌 find usr local apache tomcat 7.0.68 logs type f mtime 10 exec rm rfv find usr local apache tomcat 8.0.32...