SQL Query中的奇怪逻辑

时间:2013-04-25 14:06:26

标签: mysql sql

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

在这里。

  1. 我需要根据first_name和last_name
  2. 对结果进行排序
  3. 我的预期结果是在ORDER BY中使用CONCAT(first_name,last_name)
  4. 但我不得在ORDER BY中使用CONCAT。有没有办法构建查询

    RAW SQL:

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

    案例:first_name可以为空

    示例

    First Name           Last Name
    A                    B
                         B
    C                    D
    

    现在我需要SOrt订单

    AB 
    B
    CD
    

4 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分:0)

如果空白为NULL,请使用COALESCE

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

答案 2 :(得分:0)

这个怎么样:

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

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

答案 3 :(得分:0)

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

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

SQLFiddle here