首页 > 解决方案 > MySQL GROUP_CONCAT 与 ORDER BY 以错误的顺序返回结果

问题描述

我有一个存储产品信息的表,其中包括以下字段:id(unique)、ean、price。

我正在尝试使用相同的 ean 编号对所有结果进行分组,然后按价格排序。我正在使用 GROUP_CONCAT 因为一些 ean 记录是 NULL。我正在使用以下查询:

SELECT GROUP_CONCAT(id), * FROM table GROUP BY ean ORDER BY price ASC LIMIT 500

返回的结果不按价格升序排列。我尝试将 ORDER BY 添加到 GROUP_CONCAT 中,但是这会返回 MySQL 错误:

SELECT GROUP_CONCAT(id ORDER BY price ASC), * FROM table GROUP BY ean LIMIT 500

语法错误或访问冲突

标签: mysqlgroup-by

解决方案


函数的一个重要特征GROUP_CONCAT是,该ORDER BY子句允许您在连接之前按升序或降序对值进行排序。

默认情况下,它按升序对值进行排序。如果要按降序对值进行排序,则需要明确指定DESC选项。

GROUP_CONCAT函数也忽略 NULL值。NULL因此,如果在您的情况下碰巧有没有价格的项目,如果没有找到匹配的行或所有参数都是NULL值,它将返回。

另一个重要的事情:默认字符长度GROUP_CONCAT是 1024。

如果 1024 个字符的长度满足您的要求,则无需担心。但如果没有,您必须GROUP_CONCAT根据您的要求修改字符长度,如下所示:

  SET SESSION group_concat_max_len = 1000000;

推荐阅读