mysql在使用view和GroupBy时返回不同的结果
在mysql中使用view和GroupBy时,我得到了一个错误的结果 一个简单的表格测试 当使用普通语法作为 按名称asc从测试顺序中选择*从选择*,按test.name将值asc作为测试组 它回来了mysql在使用view和GroupBy时返回不同的结果,mysql,Mysql,在mysql中使用view和GroupBy时,我得到了一个错误的结果 一个简单的表格测试 当使用普通语法作为 按名称asc从测试顺序中选择*从选择*,按test.name将值asc作为测试组 它回来了 id name value 2 a 100 4 b NULL 5 c 120 但是,如果将子查询替换为视图, 它显示了不同的结果 按名称asc、值asc从测试顺序中选择*创建视图test\u视图 按test.name从test_视图中选择*作为测试组 它回来了 id
id name value
2 a 100
4 b NULL
5 c 120
但是,如果将子查询替换为视图,
它显示了不同的结果
按名称asc、值asc从测试顺序中选择*创建视图test\u视图
按test.name从test_视图中选择*作为测试组
它回来了
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
MySQL扩展了GROUPBY的使用,因此select列表可以引用GROUPBY子句中未命名的未聚合列。这意味着前面的查询在MySQL中是合法的。您可以使用此功能通过避免不必要的列排序和分组来获得更好的性能。但是,这主要是在GROUP BY中未命名的每个未聚合列中的所有值对于每个组都相同时才有用。服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的。此外,添加ORDERBY子句不会影响从每个组中选择值。结果集的排序发生在选择值之后,排序依据不影响服务器选择的值
没有任何迹象表明您的子查询技巧会产生影响,并确保您所希望的确定性结果我建议你阅读,然后考虑将你的查询改写为确定性。手册中的相关引用说明了当您没有在GROUPBY子句中包含所有列时会发生什么:服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的,这可能不是您想要的。此外,添加ORDER by子句不会影响从每个组中选择值。没有任何迹象表明子查询技巧会产生影响,并确保您希望的确定性结果。事实上,解决办法是改为更正查询。
select * from (select * from test group by name) as test order by test.name asc, test.value asc