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