【问题标题】:Is there a way in SQL to order by lowest to high and then 0?SQL中有没有办法按从低到高然后0排序?
【发布时间】:2021-08-14 17:45:51
【问题描述】:

我有一个关于 SQL 的问题。 想象一下,您的表中有一些项目,如下所示:

1 => id:1, title: Hey, order: 1
2 => id:2, title: Second, order: 3
3 => id:3, title: Third, order: 6
4 => id:4, title: Forth, order: 2
5 => id:5, title: Fifth, order: 0
6 => id:6, title: Sixth, order: 2
7 => id:7, title: Seventh, order: 0

我想要的是以这种方式对这些项目进行排序:

1 => id:1, title: Hey, order: 1
4 => id:4, title: Forth, order: 2
6 => id:6, title: Sixth, order: 2
2 => id:2, title: Second, order: 3
3 => id:3, title: Third, order: 6
5 => id:5, title: Fifth, order: 0
7 => id:7, title: Seventh, order: 0

如您所见,我想要的是按“订单”字段对项目进行排序,但他们的订单为 0 的项目,我希望它们进入列表的最后。是否有一些 SQL 命令来执行此操作?谢谢!

【问题讨论】:

  • 请标记您正在使用的单个 RDBMS。
  • 调用列“order”并不是一个好的选择,因为order是SQL中的保留字。
  • @MarkoIvkovic 是的,很抱歉,我只是想如果我标记两个数据库,我会尽快得到答案!谢谢提及。
  • @trincot 这只是一个明智的例子兄弟,但很好。谢谢!

标签: mysql sql postgresql sorting


【解决方案1】:

您希望 order by 最后一个带有零的 ordering 列。一个通用的方法是:

order by (case when ordering = 0 then 2 else 1 end), ordering

但是,您标记了两个数据库。在 MySQL 中,我建议:

order by (ordering 0) desc, ordering

或在 Postgres 中:

order by nullif(ordering, 0) nulls last

【讨论】:

    【解决方案2】:

    首先按布尔表达式"order" = 0排序,最后得到0s:

    order by ("order" = 0), "order"
    

    这适用于 Postgresql。

    在 MySql 中你可以做类似的事情:

    order by (`order` = 0), `order`
    

    【讨论】:

    • 不用投,直接布尔排序。
    猜你喜欢
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 2020-03-30
    • 2020-08-10
    • 2018-04-27
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多