Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中,不能按具有特定分组条件的平均值排序_Mysql_Sql_Sql Order By_Aggregate Functions - Fatal编程技术网

在MySQL中,不能按具有特定分组条件的平均值排序

在MySQL中,不能按具有特定分组条件的平均值排序,mysql,sql,sql-order-by,aggregate-functions,Mysql,Sql,Sql Order By,Aggregate Functions,我有一个表数据\u摘要。它有诸如item\u id INT(11)、user\u分组文本和value DECIMAL(10,2)等列 如果我尝试通过user\u grouping对结果进行分组,并根据value的AVG对结果进行排序,则会失败: SELECT user_grouping, AVG(value) AS avg_value, SUM(value) AS sum_value FROM data_summaries GROUP BY user_grouping ORDER BY avg_

我有一个表
数据\u摘要
。它有诸如
item\u id INT(11)
user\u分组文本
value DECIMAL(10,2)
等列

如果我尝试通过
user\u grouping
对结果进行分组,并根据
value
AVG
对结果进行排序,则会失败:

SELECT user_grouping, AVG(value) AS avg_value, SUM(value) AS sum_value
FROM data_summaries
GROUP BY user_grouping
ORDER BY avg_value
+---------------+-----------+-----------+
| user_grouping | avg_value | sum_value |
+---------------+-----------+-----------+
| London        | 50.609733 |  18978.65 |
| Paris         | 50.791733 |  19046.90 |
| New York      | 51.500400 |   2575.02 |
| NULL          | 49.775627 |  18665.86 |
+---------------+-----------+-----------+
orderby
子句似乎确实在做一些事情,因为它确实改变了顺序:

SELECT user_grouping, AVG(value) AS avg_value, SUM(value) AS sum_value
FROM data_summaries
GROUP BY user_grouping
+---------------+-----------+-----------+
| user_grouping | avg_value | sum_value |
+---------------+-----------+-----------+
| NULL          | 49.775627 |  18665.86 |
| New York      | 51.500400 |   2575.02 |
| London        | 50.609733 |  18978.65 |
| Paris         | 50.791733 |  19046.90 |
+---------------+-----------+-----------+
另一方面,按
值的
进行排序,效果与预期一致:

SELECT user_grouping, AVG(value) AS avg_value, SUM(value) AS sum_value
FROM data_summaries
GROUP BY user_grouping
ORDER BY sum_value
+---------------+-----------+-----------+
| user_grouping | avg_value | sum_value |
+---------------+-----------+-----------+
| New York      | 51.500400 |   2575.02 |
| NULL          | 49.775627 |  18665.86 |
| London        | 50.609733 |  18978.65 |
| Paris         | 50.791733 |  19046.90 |
+---------------+-----------+-----------+
如果我改为按
item\u id
分组,则按
AVG
排序有效:

SELECT item_id, AVG(value) AS avg_value, SUM(value) AS sum_value
FROM data_summaries
GROUP BY item_id
+---------+-----------+-----------+
| item_id | avg_value | sum_value |
+---------+-----------+-----------+
|       4 | 49.318225 |  11392.51 |
|       1 | 49.737835 |  11489.44 |
|       2 | 50.420606 |  11647.16 |
|       6 | 51.024242 |  11786.60 |
|       5 | 51.456537 |  11886.46 |
|       3 | 53.213000 |   1064.26 |
+---------+-----------+-----------+
我需要如何更改第一个查询才能按平均值排序?

这是一个MySQL错误,请参阅,它涉及到
avg()
以及按
文本
-列进行分组。它仍然在MySQL 5.7.15中打开

作为一种解决方法,您可以将数据类型更改为,例如,
varchar
。如果您不需要索引来加速,则强制转换也应该有效:

SELECT cast(user_grouping as char(200)), AVG(value) AS avg_value, SUM(value) AS sum_value
FROM data_summaries
GROUP BY cast(user_grouping as char(200))
ORDER BY avg_value
更新:

该缺陷在以下方面得到修复:

如果使用InnoDB临时表,则分组在基于BLOB类型的列上并根据AVG()、VAR_POP()或STDDEV_POP()聚合函数的结果排序的查询将以错误的顺序返回结果。(错误22275357,错误79366)


啊,谢谢你!我在谷歌上搜索都没有得到那个bug报告。该变通方法可产生所需的结果。