我试图弄清楚是否有办法执行查询以按某行的数字值排序,但是在设定条件下它会"双重过滤&#34 34;(可能是不正确的术语)结果并重新安排它们。
一个很好的例子如下:
游戏有一个记分牌/排行榜系统,其中显示排名最高的玩家,但是当多个玩家具有相同的技能等级时,它将根据他们的胜利数量对其进行排名。
所以,例如我在我的数据库中有以下信息:
+----+--------+------+--------+
| id | player | wins | rating |
+----+--------+------+--------+
| 1 | Tom | 12 | 1300 |
| 2 | Bob | 18 | 1300 |
| 3 | Jim | 7 | 1284 |
| 4 | Ed | 2 | 1312 |
+----+--------+------+--------+
标准order by 'rating'
查询将按此顺序显示
+----+--------+------+--------+
| id | player | wins | rating |
+----+--------+------+--------+
| 4 | Ed | 2 | 1312 |
| 1 | Tom | 12 | 1300 |
| 2 | Bob | 18 | 1300 |
| 3 | Jim | 7 | 1284 |
+----+--------+------+--------+
但是,由于Tom
和Bob
具有相同的评分,我想按胜利排序,因此表格如下:
+----+--------+------+--------+
| id | player | wins | rating |
+----+--------+------+--------+
| 4 | Ed | 2 | 1312 |
| 2 | Bob | 18 | 1300 |
| 1 | Tom | 12 | 1300 |
| 3 | Jim | 7 | 1284 |
+----+--------+------+--------+
有什么想法吗?我知道我可以通过运行单个查询,然后为具有相同评级的每个人创建2D数组,然后为每个评级运行查询(其中评级=?),但这看起来非常多余。
答案 0 :(得分:2)
在SQL中,您可以有多个ORDER BY
子句,以,
分隔。排序是单独执行的,第一个是最左边的排序,然后第一个排序列中具有相同值的记录组然后按下一个语句排序,依此类推。在您的情况下,查询将如下所示:
SELECT * FROM players ORDER BY rating DESC, wins DESC;
答案 1 :(得分:1)
您需要为ORDER BY指定方向。检查一下:
SELECT id, player, wins, rating
FROM (values
(1, 'Tom', 12, 1300),
(2, 'Bob', 18, 1300),
(3, 'Jim', 7, 1284),
(4, 'Ed', 2, 1312)
) as T (id, player, wins, rating)
ORDER BY rating desc, wins desc
阅读SQL Server联机丛书