查詢排序:order by case when理解(根據一個字段的多個值進行排序)、在order By子句中使用case語句的理解、ORDER BY 2 DESC 中 2 的理解


一、order by case when 理解  —— 根據一個字段的多個值進行排序

  先看例子: 查詢 user 表,根據用戶狀態排序。狀態為1的排在最前面 >其次是狀態為0 >狀態為4 >狀態為3 >狀態為2 >狀態為6 >狀態為其他的

select  * from user where...... order by case when status=1 then 0 when status=0 then 1 when status=4 then 2 when status=3 then 3 when status=2 then 4 when status=6 then 5 when status=5 then 6
           else status end ,

  查詢結果像如下:

 姓名 年齡 性別 狀態 張三 151 李四 201 王五 281 趙六 100 丁一 144 劉德華 154 張愛玲 253 李世民 202 楊貴妃 226 孫悟空 156 項羽 285

  如果是使用order by case when后,再根據其它條件排序,比如時間,可以繼續加排序條件

1、先說第一個用多個條件進行排序

  ORDER BY name,age       (多條件排序,還有條件可以再加在后面)

  ORDER BY name desc,age asc    (不同條件排序規則,先按名字降序排,再按年齡升序排)

2、根據一個條件的多個值,進行排序。

 order by case when status=1 then 0 when status=0 then 1 when status=4 then 2 when status=3 then 3 when status=2 then 4 , add_time desc

  此句sql的意思是: 先根據用戶狀態排序:狀態為1的排在最前面  >其次是狀態為0  >狀態為4  >狀態為3  >狀態為2 ; 再根據添加時間降序排序。

二、在order By子句中使用case語句的理解

  CASE 語句可以在SELECT 子句和ORDER BY 子句中使用

  CASE語句分為兩種Case Simple Expression and Case Search Expression

1、Case Simple Expression: CASE Column1 WHEN V1 THEN R1 WHEN V2 THEN R2 ELSE R3 END 2、Case Search Expression CASE WHEN C1=V1 THEN R1 WHEN C2=V2 THEN R2 ELSE R3 END

  當在 Order by 中使用Case語句時:

  如果排序是按照ASC的話,會將不滿足條件的結果集無序地放在總結果集的前面,然后將滿足條件的結果集排序后附加到總結果集中;

  如果使用DESC的話,則將滿足條件的結果集放在總結果集的前面,然后將不滿足條件的結果集無序地附加到總結果集后面。

  假設現在項目(project)狀態分為以下幾種:草稿1、已發布2、已下架3、刪除4,現在想要展示已經發布的項目展示在最上面,然后是草稿、已下架、已刪除狀態的項目

select id, name, subject_type_required, created_time from project order by case status when 2 then 1 when 1 then 2 when 3 then 3 when 4 then 4 end asc, created_time desc;

三、ORDER BY 2 DESC 中 2 的理解

  示例1:

SELECT last_name, salary , hire_date
FROM EMPLOYEES
ORDER BY salary DESC;

  示例2:

SELECT last_name, salary , hire_date FROM EMPLOYEES ORDER BY 2 DESC;

  以上兩個示例結果相同:因為ORDER BY salary DESC == ORDER BY 2 DESC,salary是第二個元素,所以可以使用2來代替,但是數字不可以使用0,也不可以超出查詢的列。

  例如:select * from employers order by x,如果employers表有九個字段,那個X的范圍就是1 - 9,不能是0,也不能是10。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM