[英]Order by in MySQL for multiple columns
我的表中有四個列,分別是sale date 4
, sale date 3
, sale date 2
, sale date
,這些都是銷售日期。 當頁面中顯示sale date 4
如果它不為空,則顯示為優先級,如果顯示為空,則顯示sale date 3
,然后是sale date 2
,然后是sale date
。
我的問題是在對結果進行排序時。
什么時候運行查詢
order by
isnull(`sale date 4`), trim(`sale date 4`) ,
isnull(`sale date 3`), trim(`sale date 3`) ,
isnull(`sale date 2`), trim(`sale date 2`) ,
isnull(`sale date`), trim(`sale date`) asc
我得到如下結果
**sale date 4** | **sale date 3** | **sale date 2** | **sale date**
--------------------------------------------------------------------
2013-01-24 | 2013-01-24 | 2013-01-24 | 2013-01-24
2013-01-31 | 2013-01-31 | 2013-01-31 | 2012-11-30
2013-02-01 | 2013-02-01 | 2013-02-01 | 2013-02-01
2013-03-08 | 2013-03-08 | 2013-03-08 | 2013-03-08
----NULL---- | ----NULL---- | 2013-02-28 | 2012-11-02
----NULL---- | ----NULL---- | ----NULL---- | 2013-02-28
當我在視圖中顯示時,將如下所示
1. Sale date = 2013-01-24
2. Sale date = 2013-01-31
3. Sale date = 2013-02-01
4. Sale date = 2013-03-08
5. Sale date = 2013-02-28
6. Sale date = 2013-02-28
但是我需要的是
1. Sale date = 2013-01-24
2. Sale date = 2013-01-31
3. Sale date = 2013-02-01
4. Sale date = 2013-02-28
5. Sale date = 2013-02-28
6. Sale date = 2013-03-08
我該怎么做?
isnull(column)
僅返回true
或false
。 這導致前4個記錄是前4個結果( true > false
),記錄5和6是后兩個結果。 然后,最后兩個結果按sale date 4
排序(兩個列均為NULL
),直到sale date 1
,但它們仍是已排序列表中的最后兩個項目。
您想要做的可能是這樣的:
.. ORDER BY IFNULL(`sale date 4`, IFNULL(`sale date 3`,
IFNULL(`sale date 2`, `sale date 1`)))
您可以通過以下方式訂購:
coalesce(`sale date 4`, `sale date 3`, `sale date 2`, `sale date`)
COALESCE返回第一個非NULL值,例如。
coalesce(1,2,3,4) returns 1
coalesce(null,2,3,4) returns 2
...
coalesce(null,null,null,null) returns null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.