mysql - 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
语法错误或访问冲突
解决方案
函数的一个重要特征GROUP_CONCAT
是,该ORDER BY
子句允许您在连接之前按升序或降序对值进行排序。
默认情况下,它按升序对值进行排序。如果要按降序对值进行排序,则需要明确指定DESC
选项。
GROUP_CONCAT
函数也忽略 NULL
值。NULL
因此,如果在您的情况下碰巧有没有价格的项目,如果没有找到匹配的行或所有参数都是NULL
值,它将返回。
另一个重要的事情:默认字符长度GROUP_CONCAT
是 1024。
如果 1024 个字符的长度满足您的要求,则无需担心。但如果没有,您必须GROUP_CONCAT
根据您的要求修改字符长度,如下所示:
SET SESSION group_concat_max_len = 1000000;
推荐阅读
- spring-boot - ArangoDb 的 Spring Data 集成在查询中返回空结果列表
- multidimensional-array - 在pytorch中,为什么这些方法之间在索引张量方面存在差异
- nsdata - CFDataRef vs NSData 文件散列
- javascript - 当光标在 div javascript 中时禁用滚动?
- apache-spark - 使用 foreachPartition 管理多个数据库连接和数据
- python - 来自两个(立体)摄像机的连续视频流的 3D 点云
- python - Django 模型当前链接未指向 MEDIA_ROOT 中的文件
- kubernetes - k8s webhook服务的最佳实践
- java - Java Synth XML:按钮样式属性不起作用
- php - Laravel/Lumen:处理 Model::With('Relation') 的 fetchresults