【问题标题】:How to Order By a column but array come first如何按列排序但数组排在第一位
【发布时间】:2017-10-13 18:44:42
【问题描述】:

(对不起我的英语不好)

我有一组用户 ID,如下所示:

[5, 9, 3, 22, 16]

显然这些值是动态的。

现在,我需要SELECT除具有以上 id 的用户之外的所有用户。

到目前为止我尝试了什么?

这个查询给了我准确的答案:

SELECT * FROM users WHERE id IN (5, 9, 3, 22, 16)
UNION ALL
SELECT * FROM users WHERE id NOT IN (5, 9, 3, 22, 16);

但是有没有更好的方法呢?

PS:

我正在使用 PostgreSQL 10。

【问题讨论】:

    标签: postgresql sorting sql-order-by


    【解决方案1】:

    试试这个:

    select *
    from users
    order by id not in (5, 9, 3, 22, 16), id
    

    the documentation, 中所述,ORDER BY 子句中使用的表达式

    可以是由输入列值形成的任意表达式。

    特别是,您可以使用布尔表达式,因为这种类型的值是可排序的。注意false < true

    【讨论】:

    • 我认为 OP 首先需要数组中的 id。所以应该是ID IN( ...)
    • nvm 我看到你得到 0 或 1 而那些 NOT 得到最后一个:)
    【解决方案2】:

    您可以在 ORDER BY 上使用 CASE 语句,我给您举个例子:

    select *
    from users
    order by 
    CASE WHEN id=5 THEN 1
    WHEN id=9 THEN 2
    WHEN id=3 THEN 3
    WHEN id=22 THEN 4
    WHEN id=16 THEN 5 
    END, id
    

    使用 CASE,如果您事先知道每个 id,您可以告诉 postgres 您想要的每个 id 的“优先级”或值。之后,我添加了“id”,以便其余行得到正确排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-16
      • 2016-07-19
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 2021-06-10
      相关资源
      最近更新 更多