如何解决带有IF语句的ORDER BY子句
我在使用If语句而不使用If语句的Order by子句中挣扎,它工作正常。我的int
表中有两个timestamp
类型的关键点和test
类型的日期。我正在添加示例数据以供参考
Table Name - test
id points date
------------------------
1 90 2019-12-14 09:01:10
2 10 2019-12-15 09:01:10
3 200 2019-12-16 09:01:10
4 120 2019-12-6 09:01:10
5 606 2019-12-9 09:01:10
所以我的查询
SELECT id,points,date FROM test order by points desc
返回
id points date
------------------------
5 606 2019-12-9 09:01:10
3 200 2019-12-16 09:01:10
4 120 2019-12-6 09:01:10
1 90 2019-12-14 09:01:10
2 10 2019-12-15 09:01:10
这是预期的结果,但是如果我尝试在If子句中添加points
,那么它将按字母顺序对点进行排序
查询
SELECT id,date FROM test order by IF(TRUE,date) desc
返回
id points date
------------------------
1 90 2019-12-14 09:01:10
5 606 2019-12-9 09:01:10
3 200 2019-12-16 09:01:10
4 120 2019-12-6 09:01:10
2 10 2019-12-15 09:01:10
如何以数字降序获得结果。
预期结果
id points date
------------------------
5 606 2019-12-9 09:01:10
3 200 2019-12-16 09:01:10
4 120 2019-12-6 09:01:10
1 90 2019-12-14 09:01:10
2 10 2019-12-15 09:01:10
注意:我正在使用MYSQL 8.0.21
解决方法
来自评论:
我想根据用户输入对结果进行排序,用户可以选择,他想按点或日期字段对结果进行排序
这两列具有不同的数据类型,因此您将需要两个不同级别的排序。假设用户输入作为参数:order_col
给出,则可能取值“ points”或“ date”:
order by
case when :order_col = 'points' then points end desc,case when :order_col = 'date' then date end desc
一种替代方法是将日期转换为数字,例如使用unix_timestamp()
:然后数据类型是一致的,并且单级排序就足够了:
order by case :order_col
when 'points' then points
when 'date' then unix_timestamp(date)
end desc
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。