關於mysql排序的問題實例解析
今天面試一家公司, 問了一個關於取出分數排名的問題:
如表結構如下:
name
score
zhang
50
wang
30
li
80
wu
20
要求按score輸出排名。
這個問題我以前做過的, 要求在紙上寫出來,我說有個電腦一下就出來了...
(要求在紙上寫sql 真坑爹啊)
於是回家後不到一分鐘在電腦上就寫出來了 ..., 備忘如下:
SELECT @i:=@i+1 ,name,score FROM `tb`, (select @i:=0) as i ORDER BY score desc;
結果輸出
@i:=@i+1 name score
1 li 80
2 zhang 50
3 wang 30
4 wu 20
====================================================
讓別人在紙張上寫程序, 只能發揮一半的功力啊, 面試者要反思啊。。。
=================補充分割線=====================
此題的另外一個解法:
set @i:=0; www.2cto.com
select if(ISNULL(@i),@i:=1,@i:=@i+1) , name, score from tb order by score desc ;
需兩條sql,第一條把@i 重置為0(不重置的話,下次運行時@i會用上一次的結果), 第二條再取排名
看實際應用了。。。
作者 spamer