按间隔对第 2 列进行排序,并对第 1 列 desc 进行排序
sort column 2 by interval and sort column 1 desc
我需要一个 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 |
+--------+-------+
点数和小时数都是正常整数
SELECT * FROM CurrencyUser ORDER BY cast(Hours/1000 as int) DESC, Points DESC LIMIT 6;
使用 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
我需要一个 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 |
+--------+-------+
点数和小时数都是正常整数
SELECT * FROM CurrencyUser ORDER BY cast(Hours/1000 as int) DESC, Points DESC LIMIT 6;
使用 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