按间隔对第 2 列进行排序并按顺序对第 1 列进行排序
Posted
技术标签:
【中文标题】按间隔对第 2 列进行排序并按顺序对第 1 列进行排序【英文标题】:sort column 2 by interval and sort column 1 desc 【发布时间】:2018-03-18 13:45:03 【问题描述】:我需要一个 SQL 语句,它首先按 1000 Hours
步的间隔排序,然后按 DESC 顺序对 Points
进行排序。
在这个例子中,我不知道如何使用Case
或Between
/case
。
当前结果
SELECT * FROM CurrencyUser ORDER BY Hours DESC, Points DESC LIMIT 6
+--------+-------+
| Points | Hours |
+--------+-------+
| 27 | 8005 |
| 125 | 7200 |
| 200 | 7100 |
| 567 | 1070 |
| 575 | 1050 |
| 450 | 1020 |
+--------+-------+
这是我想要的结果
+--------+-------+
| Points | Hours |
+--------+-------+
| 27 | 8005 |
| 200 | 7100 |
| 125 | 7200 |
| 575 | 1050 |
| 567 | 1070 |
| 450 | 1020 |
+--------+-------+
Points 和 Hours 都是普通整数
【问题讨论】:
【参考方案1】:使用FLOOR(Hours / 1000)
或Hours DIV 1000
SELECT *
FROM CurrencyUser
ORDER BY Hours DIV 1000 DESC, Points DESC
请注意,转换为UNSIGNED
将充当ROUND()
,因此7400
将在7
组中,但7600
在8
组中。您的示例数据未涵盖此案例。
运行此测试以查看差异:
set @Hours = 7600;
select cast(@Hours/1000 as unsigned)
, round(@Hours/1000)
, floor(@Hours/1000)
, @Hours DIV 1000
演示:http://rextester.com/DZYZ80148
【讨论】:
【参考方案2】:SELECT * FROM CurrencyUser ORDER BY cast(Hours/1000 as int) DESC, Points DESC LIMIT 6;
【讨论】:
它与SELECT * FROM CurrencyUser ORDER BY cast(Hours/1000 as SIGNED) DESC, Points DESC LIMIT 6
合作过,非常感谢以上是关于按间隔对第 2 列进行排序并按顺序对第 1 列进行排序的主要内容,如果未能解决你的问题,请参考以下文章