昨天去面試時遇到一個這樣的問題:
有一張成績表,只有兩個字段,姓名和成績。怎樣用一個sql語句查詢出某個學生的姓名,成績以及在表中的排名?
一時間我也想不出具體實現,我就提了兩種思路:一種是通過join關聯一個查詢出他排名的sql語句;一種是通過group by來實現。
回答得連自己都覺得有點心虛。請問大家如何實現呢?
假設:表名字為Course,兩個字段分別為name和score
實現語句:
1
2
3
|
SELECT 學生,成績, ( SELECT COUNT (*) FROM 表 WHERE a.成績<=成績) AS 排名 FROM 表 AS a |
方法二:
1
2
3
4
5
6
7
8
9
10
11
12
|
declare @Course table ( name varchar (100),cj int ) insert into @Course select 'a' ,99 union all select 'b' ,66 union all select 'c' ,88 select * from ( select ( select 1+ count ( name ) from @Course where cj>t.cj) mc, name ,cj from @Course t ) tem where name = 'b' |
如果有成績相同的記錄的時候,goodspeed的語句確實有一些瑕疵,但是我根據他的語句稍微修改了一下就很完美了。
1
2
3
|
SELECT name ,score, ( SELECT COUNT (*)+1 FROM course WHERE a.score<score) AS sort FROM course AS a order by sort |
更多請到這里查看評論