簡體   English   中英

SQL中兩級如何按列排序?

[英]How to order by column with two level in SQL?

我需要將 SQL 語句寫入 select 並按值和名稱的優先級排序數據。 請參閱以下標准。

數據庫架構:

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

Order Priority(isA1、isA2、isA3的優先級相等,我想從isAx為真的個數開始排序)

  • 很特別
  • 3A(所有isA都為真)
  • 2A(有兩個isA為真)
  • 1A(isA只有一個為真)
  • 二級排序:名稱

例子

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 聲明。

您在 order by 子句中需要三個術語 - isSpecial、“isA”真理的數量和名稱。 假設您的數據庫將 false 和 true 視為 0 和 1,我會這樣做:

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

如果您的數據庫不能像這樣將布爾值隱式轉換為整數,則必須在對它們求和之前將 isA 列替換為執行此邏輯的 case 表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM