SQL:ORDER BY两列混合,不基于优先级

时间:2010-12-22 19:08:21

标签: sql mysql

我正在使用mySQL。我必须按姓氏订购联系人姓名,但如果没有姓氏,我按名字排序。

这看起来像:

ORDER BY lastname = "", lastname, firstname

然而,这使得具有姓氏的那些显示在顶部。我喜欢的行为是混合第一个和最后一个名字,就像它们来自同一个领域一样。

示例(假装这些是名字):

A,T 
Z,G 
A 
B 
C

对战:

A
A,T
B
C
Z,G

由于

4 个答案:

答案 0 :(得分:17)

使用COALESCENULLIF

ORDER BY COALESCE(NULLIF(LastName, ''), FirstName), FirstName

答案 1 :(得分:8)

尝试使用Coalesce
注意:这将要求您不要使用空字符串存储空的姓氏(即“”)

ORDER BY Coalesce(LastName, FirstName)

在评论中建议通过再次将FirstName添加到订单依据列表,您将正确地命令具有相同lastName的两个人。这是一个例子。

ORDER BY Coalesce(LastName, FirstName), FirstName

答案 2 :(得分:3)

ORDER BY支持自定义排序。但根据您的逻辑,我建议您使用SELECTCONCAT中创建一个字段,然后在其上进行排序。

SELECT *, IF(LENGTH(lastname) = 0, firstname, CONCAT(lastname, ', ', firstname)) AS fullname
FROM contacts
ORDER BY fullname;

这样做的好处是可以根据相同的排序逻辑在结果中返回fullname

答案 3 :(得分:0)

ORDER BY
CASE  
  WHEN LName is null
  THEN FName 
  ELSE LName
  END 

更多here