【问题标题】:SQL query ordering in custom order自定义顺序的 SQL 查询排序
【发布时间】:2013-08-13 15:18:03
【问题描述】:

我有这样的自定义订购需求:

normal ordering  |  custom ordering 
      1          |        7
      2          |        6
      3          |        5
      4          |        4
      5          |        3
      6          |        2
      7          |        8
      .          |        .
      .          |        .
      .          |        .
      .          |        .
      .          |        N
      N          |        1

我曾考虑在ORDER BYLIMIT 的帮助下使用UNION 组合3 个不同的选择查询。但是,我不能这样做,因为UNION 必须在之前 ORDER BYLIMIT 使用。

如何进行选择(或选择)以实现上述自定义排序?

另一种解决方法可能会有所帮助,只需将此选择查询中返回的第一条记录设为最后一条记录,但如何操作?

【问题讨论】:

    标签: sql select sql-order-by


    【解决方案1】:

    试试这个:

    SELECT x
    FROM t1
    ORDER BY
        CASE
          WHEN x = 1 THEN 100000001
          WHEN x between 2 and 7 THEN 7 - x
          WHEN x between 8 and ( SELECT max(x) FROM t1 ) - 1 THEN x
          ELSE 100000000 
        END 
    

    100000000 个常量必须大于 N。
    这是simple demo

    【讨论】:

    • 感谢您的帮助。恕我直言,如果将来记录越来越大,使用硬编码的“100000001”可能会导致问题?
    • DISTINCT 查询怎么样?
    【解决方案2】:

    添加一个包含两列 ValueSequence 的新表 CustomSeq。在该表中,您可以存储值及其自定义顺序。然后加入该表并按其Sequence 列排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2011-12-15
      • 1970-01-01
      • 2019-03-28
      相关资源
      最近更新 更多