2 memory shelve Memory_shelve 于 2017.09.19 15:16 提问

mysql查询排序疑问解答

MySQL里能不能排序后带有名次(1.2.3.....)并且重复了按照(1.2.2.4 或者1.2.2.3 )的顺序排列

4个回答

Oh_my_godness
Oh_my_godness   2017.09.19 15:55

SELECT (@i:=@i+1) AS i,t.* FROM tablename t,(SELECT @i:=0) AS it ORDER BY t.字段名--------这条sql可以给你排序好的查询结果添加序号i,但是重复的问题还没有什么想法

zj_3818
zj_3818   2017.09.19 16:30

SET @num = 1;
SET @a = 0;
SELECT
IF (
t.b < @a ,@num := @num + 1 ,@num :=@num
) AS 名次 ,@a := t.b AS 成绩
FROM
test AS t
ORDER BY
t.b DESC;


Memory_shelve
Memory_shelve 非常感谢
2 个月之前 回复
zj_3818
zj_3818 回复Memory_shelve:如果当前行t.b的值小于上一行t.b(即@a),执行@num :=@num+1,否则执行@num=@num
2 个月之前 回复
Memory_shelve
Memory_shelve 亲 ,非常感谢你的回答,就是没看明白,能不能详细点,谢谢
2 个月之前 回复
zj_3818
zj_3818   2017.09.19 16:13

set num = 0;
set a = 0;
select if(@a<t.b,@num=num,@num=@num+1) as 名次,@a=t.b as 成绩 from t ORDER BY t.b;

u011212427
u011212427   2017.09.19 17:13

Mysql的函数Rank,你可以试一下。他的排名效果是1,2,2,4。

Memory_shelve
Memory_shelve 回复Maybebane: 对啊 ,所以这样比较难
2 个月之前 回复
u011212427
u011212427 回复Maybebane: 推荐一个方案:http://www.cnblogs.com/bjwylpx/p/5345162.html
2 个月之前 回复
u011212427
u011212427 Rank函数是Oracle,Mysql没有这个函数。。。。
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片