簡體   English   中英

用正確條件的數量排序

[英]order by with the number of correct condition

我有16個條件。我要按TRUE條件的數量進行order by 這意味着條件為16 TRUE的記錄要高於條件為15 TRUE的記錄。 如果我執行以下操作:

select * from tbluser
order by case 
when field1 like 'abc' AND field2 like 'aaa' AND ... field16 like 'bbb' then 1
when field1 like 'abc' AND field2 like 'aaa' AND ... field15 like 'ccc' then 2
.
.
.
when field2 like 'aaa' then 255
when field1 like 'abc' then 256

如您所見, when它們每個都有多個條件when ,我應該寫256。

考慮到只有正確條件的數量很重要而沒有其他優先級的事實,是否有更好的解決方案?

您的問題不是很清楚,但是聽起來您只想在一個凝結的領域訂購...。所以這是一個簡單的示例。

創建表#tmp(f1 int,f2位)INSERT INTO #tmp SELECT 1,1 INSERT INTO #tmp SELECT 1,1 INSERT INTO #tmp SELECT 1,1 INSERT INTO #tmp SELECT 2,1 INSERT INTO #tmp SELECT 2, 1插入#tmp SELECT 3、1插入#tmp SELECT 4,1插入#tmp SELECT 4,1

SELECT f1,count(f2)FROM #tmp其中f2 = 1-TRUE GROUP BY f1 ORDER BY 2 DESC,1

您必須決定計數是否相等的規則。

對於ANSI SQL解決方案,您可以只分配一個真謂詞1和一個假0,並加總條件,並按降序排列:

ORDER BY 
        CASE WHEN Field1 LIKE 'abc' THEN 1 ELSE 0 END +
        CASE WHEN Field2 LIKE 'aaa' THEN 1 ELSE 0 END +
        ...
        CASE WHEN Field16 LIKE 'bbb' THEN 1 ELSE 0 END DESC;

由於它是MySQL,因此可以略微捷徑,因為它允許在布爾值上添加:

ORDER BY (Field1 LIKE 'abc') + (Field2 LIKE 'aaa') ... + (Field16 LIKE 'bbb') DESC;

暫無
暫無

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

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