首页 > 解决方案 > 如何在 SQL 中按两级按列排序?

问题描述

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

数据库架构:

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

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

例子

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 语句。

标签: sqlselectsql-order-by

解决方案


您在 order by 子句中需要三个术语 - isSpecial、“isA”真理的数量和名称。假设您的数据库将 false 和 true 视为 0 和 1,我会这样做:

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

如果您的数据库不能像这样将布尔值隐式转换为整数,则必须将 isA 列替换为执行此逻辑的 case 表达式,然后再对它们求和。


推荐阅读