MYSQL公升序排序,但是值為 1的放在最後面

2021-09-24 22:20:59 字數 812 閱讀 9717

今天在工作中遇到一條sql語句,學生成績按照公升序排列,但是成績為-1(沒來參加考試的學生成績為-1)的人排在最後面。最終總結了三種寫法:

select * from table order by score = -1 asc , score ascselect * from table order by field(score , -1) asc , score ascselect * from table order by (case score when -1 then 1 else 0 end) asc , score asc

三種寫法主要區別在判斷條件

寫法一中根據score = -1判斷,當成績為-1時,判斷條件值為1,否則為0,通過公升序排列將成績為-1的資料排在最下面,然後根據成績排序。

寫法二中運用field(str,str1,str2)方法,該方法將str欄位的值與str1和str2分別進行匹配,匹配權重為1,2…依次遞增,沒有匹配的權重為0。在該語句中將score的值與-1進行匹配,此時-1成績對應的權重為1,正常成績對應權重為0,通過公升序排列將成績為-1的資料排在最下面,然後根據成績排序。

寫法三中運用case ... when ... else ... end方法進行選擇,將-1成績置為1,正常成績置為0,通過公升序排列將成績為-1的資料排在最下面,然後根據成績排序。

三種方法中寫法一速度最快。

mysql自定義函式 傳入值(0為女,1為男)

這是乙個比較簡單的判斷 傳入乙個數值若為0則輸出女 為1則輸出男 以下是我的 delimiter create function person hhh index1 int 定義乙個變數 returns varchar 10 定義返回的資料型別和長度 begin declare result var...

在公升序陣列中查詢和為特定值的兩個數

思路,從左和右同時遍歷陣列,如果左右相加大於n,則說明右邊的值偏大,則右指標左移 如果比n小,則左指標右移 總共對陣列只需要遍歷一遍。在乙個公升序陣列中查詢兩個數,使得他們的和為已知數n,時間複雜度o n 返回距離最近的一對 int find int array int len int n if a...

oracle排序欄位為null查詢出的值在前和在後

nulls first和nulls last是oracle order by支援的語法 如果order by 中指定了表示式nulls first則表示null值的記錄將排在最前 不管是asc 還是 desc 如果order by 中指定了表示式nulls last則表示null值的記錄將排在最後 ...