例一:
假设现在有一个member表记录了用户的身高,
现在对用户身高进行排名,并获取名次
SELECT t.height, @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r, (SELECT * FROM member ORDER BY height DESC) AS t;
上面这段sql的意思其实就是按身高排序,然后再新加一个字段rownum用作排名,然后rownum每一行都会自加1 这样就得到结果了
SELECT @rownum := 0:表示对rownum赋初始值0
@rownum := @rownum + 1:表示对rownum加1,语句中会从1开始,每一行往下都自动加1
例二:
现在需要实现这么一个功能:对数据库中的对应年龄的儿童的身高排序,并得到指定ID儿童的身高排名。就是比如要查询ID为9527的这名8岁儿童的身高在所有8岁儿童身高中的排名。数据库学得不深,一般就进行增减改删,所以不知道怎么实现这个功能。
网上查询了一些资料,就是先进行排序,生成行序号,然后返回对应儿童ID的序号,有个相似语句如下
select id,height,(@rowno:=@rowno+1) as rowno from test,(select (@rowno:=0)) b order by height desc;
在此基础上再查询位置:
select rowno from (select id,height,(@rowno:=@rowno+1) as rowno from test, (select (@rowno:=0)) b order by height desc) c where id = 9527;
http://www.savh.cn/thread-215.htm
转载请注明:Savh.Cn 发表