我有一个类似于以下
的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
错误消息
错误代码:1247 - 参考'分组数值'不支持(参考群组功能)
在对组连续列进行排序时是否可以使用TRIM
?如果没有,这个错误的解决方法是什么?
答案 0 :(得分:2)
看起来您想要修剪列表中的每个值。在这种情况下,请将其放在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
答案 1 :(得分:0)
你正在使用没有分组的aggegatioin函数(你应该在select和group by中明确地设置列名) 例如:假设你有来自ta的col1和col2你应该
SELECT
ta.col1, ta.col2,
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.col1, ta.col2,
ORDER BY `grouped_value` ASC
anf for trim simple apply to result
SELECT
ta.col1, ta.col2,
trim(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.col1, ta.col2,
ORDER BY `grouped_value` ASC