【发布时间】:2013-07-08 16:56:46
【问题描述】:
我在下面有一个查询,它使用基于points 的排名方法。问题是如果我按 asc 排序,排名仍然显示 1、2、3、4 等。而不是 4、3、2、1。(或者如果只想获得一个人的排名(其中 username=name1)结果来了返回 1,而不是基于 points 的实际排名)。我的代码如下:
SELECT username, @n := @n + 1 ranking, `1st places`, `2nd places`, `3rd places`, `avg`, `1st places` + `2nd places` + `3rd places` AS `points`
FROM (SELECT username,
SUM(CASE WHEN rating = 1 THEN 10 ELSE 0 END) `1st places`,
SUM(CASE WHEN rating = 2 THEN 5 ELSE 0 END) `2nd places`,
SUM(CASE WHEN rating = 3 THEN 3 ELSE 0 END) `3rd places`,
format(avg(rating),0) `avg`
FROM contest_entries
GROUP BY username
) q, (SELECT @n := 0) n
ORDER BY `points` desc
所以我想要的仍然是能够按points 进行排名,但是如果我想按 asc 排序,排名将反向...4、3、2、1。这可能吗?
Edit* 这是我使用上述代码时的样子。
username ranking 1st places 2nd places 3rd places avg points
name3 1 10 5 0 1 15
name1 2 10 0 0 1 10
name2 3 0 0 0 6 0
但是,当按点升序排序时,结果如下:
username ranking 1st places 2nd places 3rd places avg points
name2 1 0 0 0 6 0
name1 2 10 0 0 1 10
name3 3 10 5 0 1 15
分数是相反的,但排名保持不变。
【问题讨论】:
-
请提供测试数据和您期望的输出。
-
你想用
mysqlASC做什么应该显示DESC你睡得好吗?? -
选择查询没有提到'point',它是表格的一部分吗?您可能需要用“as point”命名一些搜索字段
-
对于它的排名仍然是 0+1, 1+1, 2+1, 3+1 .... 不管你如何订购... 所以也许你想要的是嵌套这个在另一个查询中查询,然后按排名排序
-
我编辑了原件,让您有更好的想法。