如何在Group_Concat列上进行排序时使用`TRIM`?

时间:2017-02-27 14:34:36

标签: mysql

我有一个类似于以下

的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?如果没有,这个错误的解决方法是什么?

2 个答案:

答案 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