mysql 在使用 view 和 group by 时返回不同的结果

标签 mysql

在 mysql 中使用 view 和 group by 时得到错误的结果。

一个简单的表格测试

id  name value
1   a   200
2   a   100
3   b   150
4   b   NULL
5   c   120

当使用普通语法时

select * from (select * from test order by name asc, value asc ) 作为测试组 by test.name;

返回

id  name value
2   a   100
4   b   NULL
5   c   120

但是,如果将子查询替换为 View , 它显示不同的结果。

创建 View test_view as select * from test order by name asc, value asc;

select * from test_view as test group by test.name;

返回

id  name value
1   a   200
3   b   150
5   c   120

我真的很困扰,请有人给我一些提示。谢谢。

最佳答案

之前分组然后排序结果,试试这个,更简单的相同结果:

select * from test group by name order by name asc, value asc

如果真的需要做子查询,也是一样,先group by:

select * from (select * from test group by name) as test order by test.name asc, test.value asc

http://dev.mysql.com/doc/refman/5.5/en/group-by-hidden-columns.html

“MySQL 扩展了 GROUP BY 的使用,因此选择列表可以引用 GROUP BY 子句中未命名的非聚合列。这意味着前面的查询在 MySQL 中是合法的。您可以使用此功能通过以下方式获得更好的性能避免不必要的列排序和分组。但是,这主要用于当 GROUP BY 中未命名的每个非聚合列中的所有值对于每个组都相同时。服务器可以自由地从每个组中选择任何值,因此除非它们是同样,选择的值是不确定的。此外,添加 ORDER BY 子句不会影响从每个组中选择值。结果集的排序发生在选择值之后,ORDER BY 不会影响服务器选择的值”

没有任何迹象表明您的子查询技巧应该有所作为并确保您希望获得确定性结果。

关于mysql 在使用 view 和 group by 时返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32404080/

相关文章:

php - 一个html表中的双重查询[PHP/mysql]

php - mysqli::query() 在选择查询时返回 true

mysql - 在两个表 : Why? 的非常简单的情况下,MySQL 5.6.16 中的 "Cannot add foreign key constraint"错误

mysql - 用于多容器 Docker 配置的 AWS Elastic beanstalk 中的版本错误

mysql - 在一个查询中使用两个 COUNT 语句时出现未知列错误

php - 在 URL 中使用连字符

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException 错误JAVA

php - 不存在查询的 MySQL 性能不佳

MySQL - 替换查询中列中的空格

php - 如何从我的数据库中获取多维菜单?