Mysql 具有ORDER BY的SQL多列排序

Mysql 具有ORDER BY的SQL多列排序,mysql,sql,Mysql,Sql,我试过这个: SELECT first_name,last_name,company_name FROM users ORDER BY last_name, company_name ASC 我有一个users表,如下所示: +------------------+--------------------+--------------------+ | first_name | last_name | company_name | +--------

我试过这个:

SELECT first_name,last_name,company_name FROM users ORDER BY last_name, company_name ASC


我有一个
users
表,如下所示:

+------------------+--------------------+--------------------+ | first_name | last_name | company_name | +------------------+--------------------+--------------------+ | Alfa | Alfa | Bravo | +------------------+--------------------+--------------------+ | Echo | Echo | Alfa | +------------------+--------------------+--------------------+ | Delta | Delta | | +------------------+--------------------+--------------------+ | | | Charlie | +------------------+--------------------+--------------------+ +------------------+--------------------+--------------------+ |名|姓|公司|名| +------------------+--------------------+--------------------+ |阿尔法|阿尔法|布拉沃| +------------------+--------------------+--------------------+ |回声|回声|阿尔法| +------------------+--------------------+--------------------+ |三角洲|三角洲|| +------------------+--------------------+--------------------+ || |查理| +------------------+--------------------+--------------------+ 当前行的顺序为:

, ,Charlie Alfa, Alfa, Bravo Delta, Delta, Echo, Echo, Alfa ,查理 阿尔法,阿尔法,好极了 三角洲,三角洲, 回声,回声,阿尔法
我想实现的是,主要按姓氏排序行,但如果不可用(空),则按公司名称排序,但排序方式仍然是将此公司名称列与姓氏列进行比较。。。对不起,可能的解释不准确。以下是我希望实现的顺序:

Alfa, Alfa, Bravo , ,Charlie Delta, Delta, Echo, Echo, Alfa 阿尔法,阿尔法,好极了 ,查理 三角洲,三角洲, 回声,回声,阿尔法 编辑:这是否可以通过一个MySQL查询实现?

使用
ISNULL()
函数。如果
last\u name
值为
NULL
,则它将使用
company\u name
值进行订购

ORDER BY ISNULL(last_name, company_name)
如果您的姓氏不为NULL,并且只是一个空白字符串,则可以使用NULLIF()函数绕过此问题:

ORDER BY ISNULL(NULLIF(last_name,''), company_name)

您应该使用
合并

SELECT first_name,last_name,company_name 
FROM users ORDER BY coalesce(last_name, company_name) ASC

COALESCE
与ANSI SQL兼容,顺便说一句。

您可以在查询中添加一个额外的列:

SELECT * FROM your_table
ORDER BY COALESCE(last_name, company_name)
SELECT first_name,last_name,company_name,
case when last_name is null 
then company_name
else last_name
end as ord 
FROM users ORDER BY ord  ASC

如果使用Oracle,空的VARCHAR列将被视为NULL。然后按照上述建议使用
COALESCE
NVL


否则,如果列中有空字符串(非空),则可以在“”时使用“
按大小写排序姓氏”,然后…
等等。

似乎不起作用。顺序仍然与我原来的顺序相同。空字段是设置为null还是仅为空?(你知道有区别吧?)是的,我知道。不,字段不是空的,只是空的。我用空值测试了它,就这样。行,谢谢你,科特!MySQL必须使用IFNULL而不是ISNULL,但这样做了。