我有一个类似于以下内容的 MySQL 查询
SELECT
ta.*,
GROUP_CONCAT(tb.value) AS `grouped_value`
FROM
test.test_a ta
INNER JOIN test.test_b tb ON tb.id = ta.t_id
GROUP BY ta.t_id
ORDER BY `grouped_value` ASC
我正在使用 GROUP_CONCAT
函数创建一个逗号分隔值,别名为 grouped_value
。上面的查询按其应有的方式工作,但 grouped_value
可能包含前导空格并扰乱最终结果的排序。我尝试使用 TRIM
函数,但在本例中似乎不起作用。
SELECT
ta.*,
GROUP_CONCAT(tb.value) AS `grouped_value`
FROM
test.test_a ta
INNER JOIN test.test_b tb ON tb.id = ta.t_id
GROUP BY ta.t_id
ORDER BY TRIM(`grouped_value`) ASC
错误消息
Error Code: 1247 - Reference 'grouped_value' not supported (reference to group function)
在对组串联列进行排序时是否可以使用 TRIM
?如果不是,有什么办法可以解决此错误?
最佳答案
您似乎想要修剪列表中的每个单独值。在这种情况下,将其放在 GROUP_CONCAT
调用中:
SELECT
ta.*,
GROUP_CONCAT(TRIM(tb.value)) AS grouped_value
FROM
test.test_a ta
INNER JOIN test.test_b tb ON tb.id = ta.t_id
GROUP BY ta.t_id
ORDER BY grouped_value ASC
正如评论中所讨论的,如果您需要保留显示值中的空格,那么您只需在 order by
子句中进行修剪即可:
ORDER BY GROUP_CONCAT(TRIM(tb.value)) ASC
关于mysql - 在对 Group_Concat 列进行排序时如何使用 `TRIM`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42488370/