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,但这样做了。