首页 > 解决方案 > Postgres - 按特定条件排序

问题描述

我有下表。

表格1

id      flag1           flag2           flag3           flag4
1       1               1               1               1               
2       1               1               1               0               
3       0               1               1               1               
4       1               0               1               1               
5       1               1               0               1               
6       0               1               1               0               
7       1               1               0               0               
8       0               0               1               1               
9       1               0               0               1               
10      0               0               0               1               
11      1               0               0               0               
12      0               1               0               0               
13      0               0               1               0

从 UI 中,我得到一个名为flag_priority.

我必须根据以下条件对结果进行排序:

如何编写 SQL 查询以根据上述条件对其进行排序?

标签: postgresqlsql-order-by

解决方案


我不会破译您拥有的所有条件,但您可以在 ORDER BY 中使用 CASE 表达式。这个想法是将每个条件转换为一个(单个)数字,该数字指示排序位置,大致如下:

order by case
           when flag1 = 1 and flag2 = 1 and flag3 = 1 and flag4 = 1 then 1 
           when (flag1 = and flag2 = 1 and flag3 = 1 and flag4 = 0) 
                or (...) then 2
           when (flag1 = 1 and flag2 = 1 and flag3 = 0 and flag4 = 0)
                or (...) then 3
          end

如果这都是函数的一部分,您也可以在 CASE 表达式中引用函数参数,例如

when flag_parameter = 'flag1' 
     AND ((flag1 = 1 and flag2 = 1 and flag3 = 0 and flag4 = 0)
           or (...)) then ...

我想知道为什么您不对boolean这些标志使用正确的(这会使表达式也更简单一些,例如:when flag1 and flag2 and flag3 and flag4


推荐阅读