簡體   English   中英

在MySQL中按多列排序

[英]Order by in MySQL for multiple columns

我的表中有四個列,分別是sale date 4sale date 3sale date 2sale 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)僅返回truefalse 這導致前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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM