当前位置: 首页 > 面试题库 >

PostgreSQL-条件排序

贝礼骞
2023-03-14
问题内容

我有下表:

key | date         | flag
--------------------------
1    now()           true
2    now() - 1 hour  true
3    now() + 1 hour  true
4    now()           false
5    now() - 1 hour  false
6    now() + 1 hour  false

我想要以下排序:

  • 首先,所有带有的行flag = false。这些行必须以排序date asc
  • 然后,其他所有行(flag = true)。但是,这些行必须使用进行排序date desc

以下查询正确吗?

(
    select *
    from test
    where flag = false
    order by date asc
)
union all
(
    select *
    from test
    where flag = true
    order by date desc
)

有一个更好的方法吗?请问union all保持行排序,因此只是连接两个内部查询的输出?

我不知道如何order by根据条件在中重复列。


问题答案:

可以使用来执行条件订单CASE,如下所示:

select *
    from test
order by 
    flag
  , case when flag then date end desc
  , case when not flag then date end asc


 类似资料:
  • 问题内容: 我在排序查询结果时遇到麻烦。 执行此查询后: 或这个: 我得到的结果是: 我的问题是: 我该怎么做才能获得下一个顺序的结果? 我正在使用posgresql 9.1。 提前致谢。 问题答案: 尝试通过以下方式明确显示顺序:

  • 问题内容: 我有这张桌子(简体): 我需要从表中选择所有项目,并按以下方式排序: 1.价格> 0.00首先的项目,按价格ASC排序 2.价格= 0.00最后的项目,按ID排序 我尝试了这个: 我得到类似的结果 我如何建立查询 ? 感谢您的时间 问题答案: 这将达到目的。

  • 我想添加一个约束,只在表的一部分中对列强制唯一性。 上面的部分是一厢情愿的想法。 有办法吗?还是应该回到关系绘图板?

  • 问题内容: 我有一个名为Gift的表,该表与一个名为ClickThrough的表具有一对多关系- 该表指示单击了该特定Gift的次数。我需要查询所有的Gift对象,按ClickThrough计数排序。我不需要返回ClickThrough计数,因为我不需要做任何事情,我只想将其用于订购即可。 我需要查询以直接返回Gift对象的列表,只是按ClickThrough计数排序。如何使用Criteria A

  • 问题内容: 我正在对两个表进行联接。一个是用户表,另一个是高级用户列表。我需要让高级会员首先出现在我的查询中。但是,仅因为它们位于高级用户表中并不意味着它们仍然是高级成员- 还有一个IsActive字段也需要检查。 因此,基本上我需要按以下顺序返回结果: 活跃的高级用户 普通和不活跃的高级用户 现在我有以下内容: 问题在于,它会将非活跃高级会员置于非高级会员之上。 (我为此使用MS SQL Ser

  • 问题内容: 通过创建这样的对象 并传递给 它可以像这样漂亮地生成SQL 但是,这都是“ AND”条件,如何通过创建条件对象来生成“ OR”条件? 问题答案: 似乎现在有另一种格式 会产生 参见文档:http : //docs.sequelizejs.com/en/latest/docs/querying/#where