讓 排序 按照 in 列表的的顯示順序排序輸出。
業務上的稀奇古怪的要求。 必須滿足。
如何 讓 sql 查詢出來的 資料的排序 是按照 id 在 in () 列表中的順序來排序顯示呢 ?
比如 : select * from tab where id in ( 1, 9 , 3,4, 8,5,6) ;
要按照 1,9,3,48,5,6 的順序顯示資料。
乍一看, 蒙圈了。 其本質 ,是按照 id 在列表中的位置 來排序。 知道了這個問題 的根本就好辦了。
網上 有現成的 mysql , oracle , sqlserver 的方法。
mysql寫法:
SELECT * FROM EVENT WHERE eventId IN(443,419,431,440,420,414,509) ORDER BY INSTR(',443,419,431,440,420,414,509,',CONCAT(',',eventId,','))
oracle寫法:
select name from order where oderid in(111,222,333,444,555,666)order by instr('111,222,333,444,555,666',orderid)
sqlserver寫法:
Select * From Product Where id in (1,1588,15782,9887,54) Order By charindex(','+ id +',', ',1,1588,15782,9887,54,')
那麼PG 資料庫的方法呢 ?
發現pg 真是太牛逼。 我至少能寫出 5種方法。
select * from tab s(id)
where id in (17,19,142867, 33)
order by position(id::text in '17,19,142867, 33') ;
select * from tab where id in (17,19,142867, 33)
order by position(','||id ::text||',' in ','|| '17,19,142867, 33'||',' ) ;
select * from tab
where id in (17,19,142867, 33)
order by array_positions(array[17,19,142867, 33],id ) ;
select * from tab s(id)
where id in (17,19,142867, 33)
order by array_positions(‘{17,19,142867, 33}:: array[], id ) ;
select * from tab
where id = any(array[ 17,19,142867, 33])
order by array_positions(‘{17,19,142867, 33}:: array[], id ) ;
前面兩種 是基於字串的構建, 效率上有些慢。
下面的基於 數值型 陣列的方法 ,效率快很多。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-2284252/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- thinkphp where in order 按照順序in的迴圈排序PHP排序
- JavaScript按照漢字拼音順序排序JavaScript排序
- 欄位按照指定 ID 順序進行排序排序
- 順序表的堆排序排序
- Python中按字母順序對列表排序Python排序
- MapReduce 按照Value值進行排序輸出排序
- 如何讓漢字以拼音字母順序排序排序
- laravel 按照whereIn中給定陣列順序輸出Laravel陣列
- MySQL按指定順序排序(order by field的使用)MySql排序
- mysql自定義排序順序語句MySql排序
- linux 中實現資料按照指定行號順序輸出Linux
- 按照價格排序!排序
- MySQL 按照指定的欄位排序MySql排序
- 任務卡片優先順序排序-Leangoo排序Go
- js實現的讓文字以拼音首字母順序進行排序程式碼JS排序
- 顯示當前排序空間的SQL排序SQL
- 順序表實現二分排序排序
- 簽名生成 引數列表(Map、List)ASCII碼從小到大排序(字典順序)ASCII排序
- 排序,檔案輸入輸出排序
- css3 列表按先後順序移動過來顯示CSSS3
- java的字典序排序Java排序
- 順序跳躍顯示陣列中的值陣列
- 按照NSArray內部的某個物件排序物件排序
- c語言:輸入任意10個正整數,按照升序排序輸出:(冒泡演算法)C語言排序演算法
- CAD中的物件顯示順序如何設定物件
- FrameLayout裡有CardView造成的顯示順序問題View
- awk多行日誌排序輸出排序
- PHP 字串陣列按照拼音排序的問題PHP字串陣列排序
- sqlserver使用order by case when進行優先順序排序SQLServer排序
- dedecms標籤按照權重排序排序
- js 漢字按照拼音排序效果JS排序
- sort按照數值大小排序排序
- 給定一個按非遞減順序排序的整數陣列 A,返回每個數字的平方組成的新陣列,要求也按非遞減順序排序。排序陣列
- 查詢列表連結串列加排序 每次重新整理順序都不同是什麼情況?排序
- Hadoop自定義輸出排序方式Hadoop排序
- C++輸出流cout的執行順序問題C++
- 演算法題———————輸入棧的入棧順序和出棧順序判斷是否合理演算法
- Map按照key和value進行排序排序