昨天去面試時(shí)遇到一個(gè)這樣的問題:
有一張成績(jī)表,只有兩個(gè)字段,姓名和成績(jī)。怎樣用一個(gè)sql語(yǔ)句查詢出某個(gè)學(xué)生的姓名,成績(jī)以及在表中的排名?
一時(shí)間我也想不出具體實(shí)現(xiàn),我就提了兩種思路:一種是通過join關(guān)聯(lián)一個(gè)查詢出他排名的sql語(yǔ)句;一種是通過group by來實(shí)現(xiàn)。
回答得連自己都覺得有點(diǎn)心虛。請(qǐng)問大家如何實(shí)現(xiàn)呢?
假設(shè):表名字為Course,兩個(gè)字段分別為name和score
實(shí)現(xiàn)語(yǔ)句:
SELECT 學(xué)生,成績(jī), (SELECT COUNT(*) FROM 表 WHERE a.成績(jī)<=成績(jī)) AS 排名 FROM 表 AS a
方法二:
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'
如果有成績(jī)相同的記錄的時(shí)候,goodspeed的語(yǔ)句確實(shí)有一些瑕疵,但是我根據(jù)他的語(yǔ)句稍微修改了一下就很完美了。
SELECT name,score, (SELECT COUNT(*)+1 FROM course WHERE a.score<score) AS sort FROM course AS a order by sort
更多請(qǐng)到這里查看評(píng)論
新聞熱點(diǎn)
疑難解答
圖片精選