如何在Group_Concat列上排序时使用TRIM?
我有一个MySQL查询,看起来类似于以下如何在Group_Concat列上排序时使用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 `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 - 参考 'grouped_value' 不支持(参照组功能)
是否有可能使用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
如果您需要用于显示目的的空格,请使用第二列,专用于排序(修剪)和一个(未修剪)以显示。 – dognose
@dognose我确实需要保留空格,这就是为什么我使用'trim'而不是'group_concat'的原因。将您的建议添加到答案将作为解决方法 – Wondercricket
你被uing一个aggegatioin功能而不群(你应该esplicitally在选择设置列名和组) 例如:假设你有col1和col2上从TA你要跟应该
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
心钠素的修剪简单的应用导致
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
为什么在不使用GROUP BY的情况下使用聚合函数GROUP_CONCAT()?你真的想要什么输出?您当前的查询似乎没有意义。 –
@TimBiegeleisen我加了'GROUP BY',看起来我错过了它,而写了问题 – Wondercricket
修剪之前分组? 'GROUP_CONCAT(trim(tb.value))as grouped_value' – dognose