В предложении 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" без использования подзапросов / вложенных запросов?
new_name
вORDER BY
, он все равно должен принимать всеCASE
выражение какGROUP_CONCAT(DISTINCT CASE...END ORDER BY CASE WHEN things.name....END SEPARATOR ', ')
. Это было бы некрасиво, но попробовать стоит. В противном случае вам, вероятно, понадобится подзапрос, чтобы поместить значение сортировки в настоящий столбец. - person Michael Berkowski   schedule 08.07.2015