【问题标题】:Sort by NULL field only if field is NULL, then sort by name in Postgresql仅当字段为 NULL 时按 NULL 字段排序,然后在 Postgresql 中按名称排序
【发布时间】:2020-03-26 17:12:27
【问题描述】:

我在 Postgresql 中有以下排序:

ORDER BY verified_at NULLS FIRST, name ASC

我想要的是首先获得所有带有 verify_at NULLS 的记录,但前提是字段 verify_at 不为空,然后按名称排序。 如果verified_at 不为NULL,我不希望verified_at 具有name 的优先级。

使用此代码,verified_at 在显示 NULL 之后优先于 name。 事实上,除了那些已验证_at NULL 的记录之外,是否可以按名称排序记录?

我想要的示例:

verified_at:     name:
NULL             Alex
NULL             Bernard
NULL             Toto
2018             Albert
2012             Boris
2015             Michel
2001             Lena

【问题讨论】:

    标签: sql postgresql sql-order-by


    【解决方案1】:

    您可以添加第一个排序条件来检查数据是否为空,然后按名称排序:

    order by (verified_at is not null)::int, name
    

    实际上直接使用布尔值也应该可以:

    order by verified_at is not null, name
    

    【讨论】:

      【解决方案2】:

      您可以通过CASE 表达式订购:

      ORDER BY
          CASE WHEN verified_at IS NULL THEN 0 ELSE 1 END,
          name
      

      【讨论】:

        猜你喜欢
        • 2019-07-15
        • 1970-01-01
        • 2023-03-05
        • 2014-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多