今天面试一家公司, 问了一个关于取出分数排名的问题:
如表结构如下:
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