【发布时间】:2020-02-24 09:36:18
【问题描述】:
我有下表。
表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 的用户驱动参数。
我必须根据以下条件对结果进行排序:
- PRIORITY 1 -- 如果 flag1 = 1,flag2 = 1,flag3 = 1,flag4 = 1,那么这些记录应该在顶部
-
PRIORITY 2 -- 如果 flag_priority == 'flag1',则对 flag1 = 1 和 2 的所有行进行排序,其中 3 个其他标志为 1
- (flag1 = 1, flag2 = 1, flag3 = 1, flag4 = 0) OR (flag1 = 1, flag2 = 0, flag3 = 1, flag4 = 1) OR (flag1 = 1, flag2 = 1, flag3 = 0, flag4 = 1)
- 如果 flag_priority == 'flag4',则将 flag4 = 1 和 2 的所有行排序为 3 个其他标志为 1
- (flag1 = 0, flag2 = 1, flag3 = 1, flag4 = 1) OR (flag1 = 1, flag2 = 0, flag3 = 1, flag4 = 1) OR (flag1 = 1, flag2 = 1, flag3 = 0, flag4 = 1)
-
PRIORITY 3 -- 如果 flag_priority == 'flag1',则对所有 flag1 = 1 的行和 3 个其他标志中的 1 个为 1 的行进行排序
- (flag1 = 1, flag2 = 1, flag3 = 0, flag4 = 0) OR (flag1 = 1, flag2 = 0, flag3 = 1, flag4 = 0) OR (flag1 = 1, flag2 = 0, flag3 = 0, flag4 = 1)
- 如果 flag_priority == 'flag4',则对所有 flag4 = 1 的行和 3 个其他标志中的 1 个为 1 的行进行排序
- (flag1 = 1, flag2 = 0, flag3 = 0, flag4 = 1) OR (flag1 = 0, flag2 = 1, flag3 = 0, flag4 = 1) OR (flag1 = 0, flag2 = 0, flag3 = 1, flag4 = 1)
-
PRIORITY 4 -- 如果 flag_priority == 'flag1',则对 flag1 = 1 的所有行进行排序,并且 - 在 3 个其他标志中为 1
- (flag1 = 1, flag2 = 0, flag3 = 0, flag4 = 0)
- 如果 flag_priority == 'flag4',则将 flag4 = 1 和 0 的所有行排序为 3 个其他标志为 1
- (flag1 = 1, flag2 = 0, flag3 = 0, flag4 = 0)
如何编写 SQL 查询以根据上述条件对其进行排序?
【问题讨论】: