按多个条件进行 SQL 排序行为

问题描述 投票:0回答:1

假设我们有以下People表:

  Name  | Id  | Employee type
-------------------------------
  Max   | 2   | Engineer
  Alice | 3   | Scientist
  Bob   | 1   | Scientist
  John  | 4   | Engineer
  Jane  | 5   | Engineer

现在我们想对它们进行如下排序:首先是科学家,然后是工程师。科学家应按 name 升序排列,工程师应按 id 降序排列

因此,结果应该是

  Name  | Id  | Employee type
-------------------------------
  Alice | 3   | Scientist
  Bob   | 1   | Scientist
  Jane  | 5   | Engineer
  John  | 4   | Engineer
  Max   | 2   | Engineer

当然,我可以先对工程师运行一个查询,然后再对科学家运行另一个查询。但是,我想知道是否还有其他更优雅的解决方案。

我现在的问题是,我们如何才能实现优雅的查询?理想情况下,您可以将 is 制定为 sqlalchemy 查询,但简单的 SQL 语句也会有很大帮助。

sql sorting sqlalchemy sql-order-by multiple-columns
1个回答
0
投票

根据您对优雅的定义,您可以使用

case
语句和子查询:

select p.* from people p order by case when p.employee_type = "Scientist" then p.name else (select max(p1.id) from people p1) - p.id
© www.soinside.com 2019 - 2024. All rights reserved.