【问题标题】:MySQL ORDER BY Compensating for Empty ColumnsMySQL ORDER BY 补偿空列
【发布时间】:2014-05-28 22:01:58
【问题描述】:

我有一个简单的 MySQL 选择,我想按公司名称和名字排序。该表的列是:

COMPANY_NAME

FIRST_NAME

LAST_NAME

当我使用标准 ORDER BY 运行选择时,我得到以下信息:

SELECT COMPANY_NAME, FIRST_NAME, LAST_NAME
from TABLE_contacts
WHERE CONTACT_STATUS = 'ACTIVE'
ORDER BY COMPANY_NAME, FIRST_NAME;

+------------------+------------+-----------+
| COMPANY_NAME     | FIRST_NAME | LAST_NAME |
+------------------+------------+-----------+
|                  | Bob        | Jones     |
|                  | Mark       | Doe       |
| Acme Company     | Joan       | Todd      |
| Fun Company      |            |           |
+------------------+------------+-----------+

但是,我需要列表按字母顺序排列。在某些情况下,公司名称为空或名字为空。我的目标是使用公司名称(如果存在)按字母顺序列出,如果不存在,则使用名字列出这样的输出:

+------------------+------------+-----------+
| COMPANY_NAME     | FIRST_NAME | LAST_NAME |
+------------------+------------+-----------+
| Acme Company     | Joan       | Todd      |
|                  | Bob        | Jones     |
| Fun Company      |            |           |
|                  | Mark       | Doe       |
+------------------+------------+-----------+

我试过下面的说法,但我的结果是一样的:

SELECT COMPANY_NAME, FIRST_NAME, LAST_NAME
from TABLE_contacts
WHERE CONTACT_STATUS='ACTIVE'
ORDER BY CASE WHEN COMPANY_NAME IS NULL THEN FIRST_NAME ELSE COMPANY_NAME END DESC;

感谢您的帮助!

【问题讨论】:

    标签: mysql sql-order-by


    【解决方案1】:

    我想你想要:

    order by coalesce(Company_Name, First_Name)
    

    但是,这是假设 Company_NameNULL 而不是空白。您可能需要扩展您的逻辑:

    order by (case when Company_Name is not null and Company_Name <> ''
                   then Company_Name
                   else First_Name
              end)
    

    我不确定desc 在您的示例中的用途。您想要的结果按升序排列。

    【讨论】:

    • 嗨!感谢您及时的回复。不幸的是,这给了我一个与第一个示例相同的输出,其中首先显示没有公司名称的联系人。
    • @Jason 。 . .尝试修改后的查询。
    猜你喜欢
    • 2015-02-26
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2018-08-30
    相关资源
    最近更新 更多