在 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/