1. 程式人生 > >mysql order by if()或order by in()條件排序

mysql order by if()或order by in()條件排序

在做sqlzoo的時候,碰到一個SQL的排序問題,他把符合條件的單獨幾行,可以放在查詢結果的開始,或者查詢結果的尾部。
通過的方法就是IN語句(也可以通過IF語句)

自己做了個測試,如下,這個是表的所有內容
這裡寫圖片描述

使用ORDER BY配合if語句

需求1:將age為24的列置頂,其他的按照age的自然順序排列:

這裡寫圖片描述

我們可以看到age為24的列被強行拉到了最前邊。
這裡需要注意:

if(age=24,0,1),age;

對age進行排序的同時,給age附加一個隱藏屬性,這個隱藏屬性可以是0或者1。
就是在對age排序的時候,優先順序是判斷age是否為24,如果是,返回0,如果不是,返回1。
先進行age隱藏屬性的排序,隱藏屬性排完以後,再進行剩餘age的自然排序。

也就是說,你可以把這個 if 語句,看成是一個獨立的column。

需求2:如果將age為24的列放到最後並且其他的列按照age的自然順序排列:

這裡寫圖片描述

正如上面一段說的,你可以把if 語句看成是獨立的column,所以你也可以為他新增排序條件ASC或者DESC,當然預設是ASC,可以不寫。

使用ORDER BY配合IN語句

需求:將batchDate為’2018-06-27’和’2018-06-23’放到最後,其他的列按照batchDate的自然順序排列

這裡寫圖片描述

這裡,batchDate in會判斷,如果batchDate滿足條件返回1,不滿足返回0。
所以,滿足條件的兩行,因為返回值是1,進行ASC排序的時候,就被放置在了最後。

相關推薦

mysql order by if()order by in()條件排序

在做sqlzoo的時候,碰到一個SQL的排序問題,他把符合條件的單獨幾行,可以放在查詢結果的開始,或者查詢結果的尾部。 通過的方法就是IN語句(也可以通過IF語句) 自己做了個測試,如下,這個是表的所有內容 使用ORDER BY配合

mysql查詢報錯: ORDER BY clause is not in GROUP BY..this is incompatible with sql_mode=only_full_group_by

在用mysql執行如下查詢的時候: select * from `sys_user_group` group by `GROUP_ID` 報錯資訊如下: [Err] 1055 - Expr

MySQL如何利用索引優化ORDER BY排序語句

login 查詢 art mysq 實例 .html 情況 降序排序 建立索引 官網排序優化:http://dev.mysql.com/doc/refman/5.5/en/order-by-optimization.html MySql創建索引時支持ASC或DESC排序。

MYSQL的高階查詢:Group ByOrder by, having子句

1. Group by就是分組的意思,根據某個欄位進行分組。Group By 與 Count()函式  基本語法:group by 欄位名; 使用前面的學生表,我們來進行練習 舉例:根據性別分組 根據上面顯示,我們使用了分組語句,結果出現了資料丟失的情況。分組之後男和女只顯示一

Mysql,union all 與 order by的使用

a  union all b 如果a中有order by則報錯 order by寫在b後面才正確 而且 排序的欄位均需要在a,b中都查詢出來,如果a,b中不查詢出c1,按照order by c1會報錯(unknow column 'c1') 如果不用union,只有a或b,即使

MySQL如何利用索引優化ORDER BY排序語句

MySQL也能利用索引來快速地執行ORDER BY和GROUP BY語句的排序和分組操作。 通過索引優化來實現MySQL的ORDER BY語句優化: 1、ORDER BY的索引優化。如果一個SQL語句形如: SELECT [column1],[column2],…. FROM [TABLE] ORDER BY

Mysql->order by SQL 根據多個條件排序

Mysql中根據多個條件排序:(各個條件間使用逗號隔開)     首先根據class_name字串長短升序排列,然後根據開始時間降序排列: SELECT * FROM signup_class s

[mysql]SQL語句效能優化--Order by中加DESC慢很多的原因調查與處理

1. mysql在資料量較大的時候、使用order by查詢結果集時速度很慢的原因可能有以下幾種:1) 排序欄位不在同一張表中2) 排序欄位沒有建索引3)排序欄位加DESC後索引沒有起作用(如何讓索引起作用才是關鍵、且聽下文分解)4)排序欄位中加函式導致索引不起作用(這種一定

mysql 聯合索引> 和 order by 不走 索引 慎用

我有一個聯合索引idx_css(createddate,storeId,site) EXPLAIN SELECT * FROM statis_domain AS a WHERE a.`createddate` > '2015-04-23' AND a.`store

MySQL】效能優化之 order by (一)

前言    工作過程中,各種業務需求在訪問資料庫的時候要求有order by排序。有時候不必要的或者不合理的排序操作很可能導致資料庫系統崩潰。如何處理好order by排序呢?本文從原理以及優化層面介紹 order by 。一 MySQL中order by的原理   1 利用索引的有序性獲取有序資料  當查詢

Mysql高手系列 - 第8篇:詳解排序和分頁(order by & limit),及存在的坑

這是Mysql系列第8篇。 環境:mysql5.7.25,cmd命令中進行演示。 程式碼中被[]包含的表示可選,|符號分開的表示可選其一。 本章內容 詳解排序查詢 詳解limit limit存在的坑 分頁查詢中的坑 排序查詢(order by) 電商中:我們想檢視今天所有成交的訂單,按照交易額從高到低排序

MySQL實驗 內連線優化order by+limit 以及新增索引再次改進

# MySQL實驗 內連線優化order by+limit 以及新增索引再次改進 在進行[子查詢優化雙引數limit](https://www.cnblogs.com/G-Aurora/p/13254473.html)時我萌生了測試更加符合實際生產需要的`ORDER BY + LIMIT`的想法,或許我們也

MySQL】出現“SELECT list is not in GROUP BY clause and contains xxx”錯誤提示

engine 數據 連接 設置 subst sql_mode xxx and sele 需要設置為 sql_mode=‘NO_ENGINE_SUBSTITUTION‘ 設置方式: 1、MySQL客戶端連接上數據庫。 2、當前操作的數據切換成 mysql 3、執行 SELEC

隨機獲得MySQL數據庫中100條數據方法 駕照題庫項目 MVC架構 biz業務層的實現類 根據考試類型randorder通過dao數據訪問層接口得到數據庫中100全部數據

mysql數據庫 imp swift mvc架構 als new util pack gson package com.swift.jztk.biz; import java.util.Collections; import java.util.Comparator;

Hive之Order,Sort,Cluster and Distribute By

測試資料 create table sort_test( id int, name string ) row format delimited fields terminated by '\t' lines terminated by '\n' stored as textfile; [

mysql聯查中使用if和group by會讓你的結果不是你想要的

mysql中的if語句遇到統計count group by的時候會出現不準確的情況,原因是分組後if條件的結果以第一條為準,不會跟著分組   例如: SELECT SQL_NO_CACHE t1.*,t2.nick_name,t2.avatar,IF(t1.user_id=104080,

關於mysql #1 of SELECT list is not in GROUP BY clause and contains 的問題

   今天幫老師修改資料庫的一些資料,發現同一條語句在伺服器上的資料庫中可以執行,但是在我自己電腦的資料庫就不可以。錯誤提示為: #1 of SELECT list is not in GROUP BY clause and contains nonaggregated co

oracle的多欄位排序去重Row Number Over Partition By A B Order By C

                今天遇到需要在多條有重複欄位的記錄中選取修改日期最接近現在的欄位,如下:我想要選取CPDM,FBQD相同,KSRQ離現在最近的那條記錄,選出的記錄應該為1、2、3,而4、5、6、7應該捨棄掉。我們使用這條語句:Row_Number() Over(Partition By Cpd

order by 1 與 order by 列名

經常見sql語句中order by 1或者order by 2...order by N,有時候很莫名其妙.其實1表示第一個欄位,2表示第二欄位; 依此類推,當表中只有2個欄位時,oder by 3就會出錯,這個跟order by 列名沒有什麼區別,不過在特殊情況下還是很

資料庫之SQL ORDER BY 語句用於對結果集進行排序

ORDER BY 語句用於對結果集進行排序。 ORDER BY 語句 ORDER BY 語句用於根據指定的列對結果集進行排序。 ORDER BY 語句預設按照升序對記錄進行排序。 如果您希望按照降序對記錄進行排序,可以使用 DESC 關鍵字。 原始的