我可以创建一个 SQL 查询,使 Col A 成为我的主要排序键,但如果该值不为 NULL,则 Col B 成为我的主要排序吗?
Can I create an SQL query such that Col A is my primary sort key but if the value is not NULL, Col B becomes my primary sort?
使用 MariaDB,我有一个提供信息的视图,包括事件日期和邀请是否已被接受。 eventdate
属于 date
类型,是事件的日期。 accepted
是 tinyint
类型,如果拒绝邀请则包含 0,如果已接受邀请则包含 1,否则默认为 NULL.
我想开发一个按 accepted
排序的查询,然后 eventdate
这样我的 NULL 值将出现在我列表的顶部eventdate
订单。但是,如果 accepted
是 NOT NULL 那么我希望数据按 eventdate
.
排序
我当前的查询是:
SELECT * FROM invite_view ORDER BY accepted, eventdate
但是,这会对 table 进行排序,因此所有 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
一种方法是使用 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
db<>fiddle here
使用 MariaDB,我有一个提供信息的视图,包括事件日期和邀请是否已被接受。 eventdate
属于 date
类型,是事件的日期。 accepted
是 tinyint
类型,如果拒绝邀请则包含 0,如果已接受邀请则包含 1,否则默认为 NULL.
我想开发一个按 accepted
排序的查询,然后 eventdate
这样我的 NULL 值将出现在我列表的顶部eventdate
订单。但是,如果 accepted
是 NOT NULL 那么我希望数据按 eventdate
.
我当前的查询是:
SELECT * FROM invite_view ORDER BY accepted, eventdate
但是,这会对 table 进行排序,因此所有 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
一种方法是使用 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 |
db<>fiddle here