讓 排序 按照 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排序
- 順序表的堆排序排序
- laravel 按照whereIn中給定陣列順序輸出Laravel陣列
- MySQL按指定順序排序(order by field的使用)MySql排序
- linux 中實現資料按照指定行號順序輸出Linux
- mysql自定義排序順序語句MySql排序
- 按照價格排序!排序
- 任務卡片優先順序排序-Leangoo排序Go
- 簽名生成 引數列表(Map、List)ASCII碼從小到大排序(字典順序)ASCII排序
- 順序表實現二分排序排序
- 排序,檔案輸入輸出排序
- css3 列表按先後順序移動過來顯示CSSS3
- gson改變輸出欄位的順序
- 順序跳躍顯示陣列中的值陣列
- CAD中的物件顯示順序如何設定物件
- 按照NSArray內部的某個物件排序物件排序
- c語言:輸入任意10個正整數,按照升序排序輸出:(冒泡演算法)C語言排序演算法
- 按照時序監控英偉達顯示卡的利用率
- FrameLayout裡有CardView造成的顯示順序問題View
- Hadoop自定義輸出排序方式Hadoop排序
- [20200317]NULL與排序輸出.txtNull排序
- sqlserver使用order by case when進行優先順序排序SQLServer排序
- 給定一個按非遞減順序排序的整數陣列 A,返回每個數字的平方組成的新陣列,要求也按非遞減順序排序。排序陣列
- List集合按照由小到大排序或者由大到小排序排序
- 輸入三個數按從大到小的順序輸出
- 查詢列表連結串列加排序 每次重新整理順序都不同是什麼情況?排序
- Python 列表與字典 排序 的奇妙之旅Python排序
- 說說你對HTML元素的顯示優先順序的理解HTML
- C++輸出流cout的執行順序問題C++
- Java 8 Comparator: 列表排序Java排序
- python列表怎麼排序Python排序
- 演算法題———————輸入棧的入棧順序和出棧順序判斷是否合理演算法
- Transpile Webpack Plugin:讓 Webpack 按照原始檔的目錄結構輸出WebPlugin
- 仿 iOS 列表的編輯功能 – 排序篇iOS排序
- Django Admin自定義app中模型顯示順序DjangoAPP模型