按空白列中的第一个字母发出排序列

时间:2014-07-22 15:23:16

标签: mysql sql

这是我的表格

|users|
  |id|   |lastname1|   |lastname2|   |name|   |company_name|
   1      Messi         Ramirez      Lionel      
   2      Gates         Bush         Bill        
   3      Klose         Kazer        Miroslav    
   4      Ozil          Demon        Mezut       
   5                                             Facebook
   6                                             GMAIL
   7                                             MYSPACE
   8                                             Twitter

我试图像lastname1那样订购company_name。

有些朋友给了我这个code但是没有使用空值来处理NULL值:

select * from users 
order by COALESCE(lastname1,company_name),lastname2,name ASC;

我应该有这个答案

注意:" facebook"的第一个字母是F和"盖茨"是G所以它继续下一个字母。

   5                                             Facebook
   2      Gates         Bush         Bill        
   6                                             GMAIL
   3      Klose         Kazer        Miroslav    
   1      Messi         Ramirez      Lionel      
   7                                             MYSPACE
   4      Ozil          Demon        Mezut       
   8                                             Twitter

请有人帮助我吗?

2 个答案:

答案 0 :(得分:1)

使用coalesce()

order by coalesce(lastname1, company_name)

我不确定其他专栏对order by有什么影响,所以我将其删除了。

编辑:

如果值为空或空格而不是NULL,则使用case

order by (case when trim(lastname1) = '' or lastname1 is null then company_name
               else lastname1
          end)

答案 1 :(得分:1)

您可以使用此查询执行此操作:

select * from users 
order by COALESCE(lastname1,company_name),lastname2,name ASC;

COALESCE获取它的第一个非null元素列表。

DEMO

如果在修改后的问题中,空字符串应该被认为是NULL,则可以使用

执行此操作
select * from users 
order by 
CASE 
    WHEN TRIM(lastname1) = '' THEN company_name
    WHEN lastname1 IS NULL THEN company_name
    ELSE lastname1
END;

Demo