当前位置: 首页 > >

MySQL根据多个列是否为空排序

发布时间:

最*遇到一个需求,需要按照多个列是否为空值排序,具体需求和数据库表结构如下:


需求:


    根据手机号和地址进行排序手机号和地址均不为空排在最上其次是手机号为空,地址不为空其次是地址为空,手机号不为空其次是手机号和地址均为空

?


数据库表结构如下:



?


解决方案一:


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 进行排序即可



友情链接: