最近遇到一个需求,需要按照多个列是否为空值排序,具体需求和数据库表结构如下:
需求:
- 根据手机号和地址进行排序
- 手机号和地址均不为空排在最上
- 其次是手机号为空,地址不为空
- 其次是地址为空,手机号不为空
- 其次是手机号和地址均为空
数据库表结构如下:
解决方案一:
SELECT
CUST_PHONE,
ADDR,
CASE
WHEN CUST_PHONE IS NOT NULL
AND ADDR IS NOT NULL THEN
3
ELSE
(
CASE
WHEN CUST_PHONE IS NULL
AND ADDR IS NOT NULL THEN
2
ELSE
(
CASE
WHEN CUST_PHONE IS NOT NULL
AND ADDR IS NULL THEN
1
ELSE
(
CASE
WHEN CUST_PHONE IS NULL
AND ADDR IS NULL THEN
0
END
)
END
)
END
)
END weight
FROM
`tabel`
ORDER BY
weight DESC
解决方案二:
这里就直接说思路不贴代码了,用两个变量 x,y分别表示手机号和地址是否为空:
x = phone is null ?0:1;
y = addr is null ?0:2;
最后根据x+y的四种情况:0、1、2、3 进行排序即可