mysql - 在对 Group_Concat 列进行排序时如何使用 `TRIM`?

标签 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

错误消息

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/

相关文章:

javascript - 创建实时价格计算表格

php - 需要二维码帮助才能获得入场二维码门票

MySQL 如何将第二组参数结果转换为列?

python - python commit() 的 mysql.connector 不起作用

php - Laravel 获取 sql 查询的总和

mysql - 从 `-all-databases` mysql 转储中恢复特定数据库

mysql - Wordpress 4.9.6(或 4.9)是否适用于 MySQL 5.20?

php - 通过比较表列中的特定日期来获取当前日期记录之前的 x 天

php - 更新数据库中的多项选择复选框

mysql - 电影评论网站