繁体   English   中英

MySQL由两个varchar列排序

[英]MySQL order by two varchar columns

我在提出描述性标题方面遇到了麻烦,因此我认为更好的方式来表达我想要的是一个例子。 假设我有一张包含以下内容的表格:

NAME | EMAIL
John | john@example.com
Mike | mike@example.com
NULL | albert@example.com
Bill | zebra_bill@example.com

我想订购查询,以便结果如下:

NAME | EMAIL
NULL | albert@example.com
Bill | zebra_nill@example.com
John | john@example.com
Mike | mike@example.com

如果不清楚,则应该通过名称和电子邮件进行排序,在NAME列没有该行的条目时混合两个优先级。 因此,如果NAME为NULL,它使用EMAIL中的值来相对于其他行对该行进行排序,但如果NAME不是NULL,则它使用NAME而不是EMAIL进行排序。

你可以猜到, ORDER BY name ASC, email ASC不能解决问题。 我不确定如何谷歌这个,所以我转向SO。 提前致谢。

一种方法是添加一列来排序:

SELECT
    NAME,
    EMAIL,
    IFNULL(NAME, EMAIL) AS sort_column
FROM
    mytable
ORDER BY
    sort_column

ORDER BY使用CASE表达式。

QUERY

SELECT* FROM your_table_name
ORDER BY CASE WHEN NAME IS NULL THEN 0 ELSE 1 END, NAME, EMAIL;
select name, email
from my_table
ORDER BY name IS NULL DESC, NAME ASC, EMAIL ASC
SELECT TOP 1000 [Name]
      ,[email]
  FROM [db1].[dbo].[emailTB] order by 
    CASE WHEN Name !='NULL'  THEN [Name] else NULL  end ,email

它对我有用!

SELECT * 
FROM   yourtable 
ORDER  BY CASE 
            WHEN name IS NULL THEN email 
            ELSE name 
          end, 
          email 

http://sqlfiddle.com/#!9/0f48ec/2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM