[英]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.