如何排序的列与两个级别的SQL?



我需要编写一个SQL语句来根据值和名称的优先级来选择和排序数据。请参见以下标准。

数据库模式:

    name : string
    isSpecial : boolean
    isA1 : boolean
    isA2 : boolean
    isA3 : boolean

顺序优先级(isA1, isA2, isA3的优先级相等,我想从isAx的true的个数排序)

  • 牵手
  • 3A(所有isA为真)
  • 2A(两个isA为真)
  • 1A (isA只有一个为真)
  • 二级排序:name

例子

id, name, isSpecial, isA1, isA2, isA3
1, aaa, false, true, true, true
2, bbb, true, true, true, true
3, ccc, false, false, false, true
4, hhh, false, true, false, true
5, ddd, false, true, true, false

期望顺序

2 (isSpecial = true)
1 (3A)
5 (2A, name = ddd)
4 (2A, name = hhh)
3 (1A)

你有什么想法或建议吗? 请查看下面评论中的SQL语句。

按子句顺序需要三个术语- isSpecial, "isA"真相和名字。假设数据库将false和true视为0和1,我将这样做:

SELECT   *
FROM     docs
ORDER BY isSpecial DESC,
         isA1 + isA2 + isA3 DESC,
         name ASC

如果您的数据库不能像这样隐式地将布尔值转换为整型,则必须在求和之前将isA列替换为执行此逻辑的大小写表达式。

最新更新