在MySQL group_concat()子句中,我试图对case语句的结果值进行排序。下面的查询配置正确地命令things.name,但没有在相同的上下文中排序“非US”或“未知”值。
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“排序的方法?
发布于 2015-07-08 20:47:37
您可以通过按列位置(而不是列名)排序来实现这一点。
对于您的情况,ORDER BY 1应该可以工作。
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 1 SEPARATOR ', ')
FROM things
GROUP BY things.id发布于 2015-07-08 20:31:18
会话变量可能会工作,但我不确定GROUP_CONCAT()中的计算顺序:
SELECT
things.id
, group_concat(DISTINCT
@new_name := (CASE
WHEN things.name <> 'United States' THEN 'Non-US'
WHEN things.name IS NULL THEN 'Unknown'
ELSE things.name
END
) ORDER BY @new_name SEPARATOR ', ')
FROM things
GROUP BY things.id
;如果这样做不起作用,您可以尝试按区段顺序执行赋值,而只需在pre BY中使用@new_name。
https://stackoverflow.com/questions/31303035
复制相似问题