使用MariaDB,我有一個視圖,提供包含事件日期和是否接受邀請的資訊。 eventdate
是類型為 date
的事件日期。 accepted
是類型為 tinyint
的字段,如果邀請被拒絕,則為0,如果邀請被接受,則為1,否則預設為NULL。
我想開發一個查詢,按照accepted
和eventdate
排序,這樣我的NULL值會出現在eventdate
順序的最前面。然而,如果accepted
不為NULL,則希望按照eventdate
排序。
我的目前查詢是:
從邀請視圖中選擇* ORDER BY已接受,eventdate
然而,這個查詢將表格排序,使得所有accepted = NULL
的值在前面,所有0值在其後,最後所有1值在最後,如下所示:
eventname | eventdate | accepted --------------------------------- Event 1 | 2022-04-14 | NULL Event 2 | 2022-04-25 | NULL Event 3 | 2022-03-28 | 0 Event 4 | 2022-05-03 | 0 Event 5 | 2022-04-14 | 1 Event 6 | 2022-05-01 | 1
我希望得到類似這樣的結果:
eventname | eventdate | accepted --------------------------------- Event 1 | 2022-04-14 | NULL Event 2 | 2022-04-25 | NULL Event 3 | 2022-03-28 | 0 Event 5 | 2022-04-14 | 1 Event 6 | 2022-05-01 | 1 Event 4 | 2022-05-03 | 0
P粉2421267862023-09-16 09:12:10
一種方法是使用CASE條件排序結果
SELECT * FROM invite_view ORDER BY CASE WHEN accepted IS NULL THEN accepted ELSE eventDate END
結果:
id | eventname | eventdate | accepted |
---|---|---|---|
1 | Event 1 | 2022-04-14 | null |
#2 | Event 2 | 2022-04-25 | null |
#3 | Event 3 | 2022-03-28 | 0 |
5 | Event 5 | 2022-04-14 | 1 |
6 | Event 6 | 2022-05-01 | 1 |
4 | Event 4 | 2022-05-03 | 0 |