在 select 查询中按大小写排序

Order by and case in select query

users
id | status | qualified
1  | yes    | BE
2  | no     | BCOM
3  | no     | BSC
4  | no     | BE
5  | yes    | BE

我希望具有 qualified = BE 的用户先获取,然后状态为 yes 然后其他用户

我写了如下查询但没有得到预期的结果

SELECT * 
FROM users 
ORDER BY 
CASE WHEN qualified =  'BE'
THEN 0
 WHEN status =  'yes'
THEN 0  
ELSE 1 
END

在 MySQL 中比较 01 中的结果。所以你可以做

SELECT * 
FROM users 
ORDER BY qualified <> 'BE',
         status <>  'yes'

通常你可以做到

SELECT * 
FROM users 
ORDER BY case when qualified = 'BE' then 1 else 2 end,
         case when status = 'yes' then 1 else 2 end

你也可以这样做

select case when qualified = 'BE' Then 1 当status = 'Yes' then 2 else 3 End as Ranking, * 来自用户排序