【问题标题】:Strange logic in SQL QuerySQL 查询中的奇怪逻辑
【发布时间】:2013-04-19 11:26:01
【问题描述】:

我有一个奇怪的案例构建 MySql 查询:

来了。

  1. 我需要根据名字和姓氏对结果进行排序
  2. 我的预期结果是在 ORDER BY 中使用 CONCAT(first_name, last_name)

但我仅限于在 ORDER BY 中不使用 CONCAT。有什么方法可以构建查询

原始 SQL:

SELECT CONCAT(first_name, last_name) 
FROM users 
ORDER BY CONCAT(first_name, last_name)

案例:first_name 可以为空

例子

名字 姓氏 甲乙 乙 光盘

现在我需要排序顺序

AB 乙 光盘

【问题讨论】:

  • SELECT CONCAT(first_name, last_name) FROM users ORDER BY 1?

标签: mysql sql


【解决方案1】:

在 MySQL 中,您可以按列别名排序:

SELECT CONCAT(first_name, last_name) AS full_name 
FROM users ORDER BY full_name

SQLFiddle here.

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT full_name FROM (
        SELECT CONCAT(first_name, last_name) AS full_name FROM users
    ) AS tmp ORDER BY full_name
    

    【讨论】:

      【解决方案3】:

      这个怎么样:

      order by (case when FirstName is NULL or FirstName = '' then LastName else FirstName end),
               LastName
      

      不太严重,您可以使用 concat_ws() 。 . .就像concat(),但不同。

      【讨论】:

        【解决方案4】:

        如果空格是NULL,则使用COALESCE

        ORDER BY CONCAT(COALESCE(first_name,''), COALESCE(last_name,''))
        

        【讨论】:

          猜你喜欢
          • 2018-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-24
          相关资源
          最近更新 更多