【发布时间】:2015-09-26 23:24:46
【问题描述】:
在 MySQL group_concat() 子句中,我试图对 case 语句的结果值进行排序。以下查询配置正确排序things.name,但未在同一上下文中排序“非美国”或“未知”值。
SELECT
things.id
,group_concat(DISTINCT
CASE
WHEN things.name <> 'United States' THEN 'Non-US'
WHEN things.name IS NULL THEN 'Unknown'
ELSE things.name
END
ORDER BY name SEPARATOR ', ')
FROM things
GROUP BY things.id
我想做这样的事情,但它不起作用:
SELECT
things.id
,group_concat(DISTINCT
(CASE
WHEN things.name <> 'United States' THEN 'Non-US'
WHEN things.name IS NULL THEN 'Unknown'
ELSE things.name
END) AS new_name
ORDER BY new_name SEPARATOR ', ')
FROM things
GROUP BY things.id
有没有办法在不使用子查询/嵌套查询的情况下按“new_name”排序?
【问题讨论】:
-
如果它不接受
ORDER BY中的别名new_name,它仍然应该接受整个CASE表达式为GROUP_CONCAT(DISTINCT CASE...END ORDER BY CASE WHEN things.name....END SEPARATOR ', ')这会很难看,但值得一试。否则你可能需要一个子查询来将排序值填充到一个真实的列中。 -
子查询会比我下面的答案更清晰;尽管对 id 字段进行分组意味着您根本不需要 GROUP_CONCAT()。
-
本示例中的 id 字段只是出于说明目的而放入其中(也许不是最佳选择)。真正的查询是不同的。
标签: mysql sql sql-order-by group-concat