回答
编号GROUP BY
对返回行的顺序没有标准影响。这就是ORDER BY
的设计目的。
如果您获得某种GROUP BY
返回的某种可重复或可预测的排序顺序,那么您的数据库管理系统中的某些内容未在标准中定义。
正如前面的回答所解释的,除ORDER BY
之外的任何基本SQL构造都没有暗示排序。
但是,要计算GROUP BY
,可能会发生索引扫描或内存中排序(以创建存储桶),并且此类索引扫描或排序意味着按排序顺序遍历数据。因此,一个特定的数据库往往表现如此,这并非偶然。但是,不要依赖它,因为使用一组不同的索引,或者甚至只是一个不同的查询计划(可能会触发少量插入和/或重新启动数据库服务器),这种行为可能会相当不同。
还要注意的是重新排序ORDER BY
子句中的列列表将导致重新排序可靠的输出,而在GROUP BY
条款重新排序列列表将有可能没有任何效果。
没有使用看似“冗余”ORDER BY的性能成本。查询计划可能是相同的,如果原始的已经保证了排序的输出。
对排序GROUP BY的输出的Um不在标准中,因为有标准的分组算法,不会按顺序产生结果。
其中最常见的是使用哈希表来完成分组。
此外,在多线程服务器上,可以对数据进行排序,但结果将按处理器逐个返回。无法保证最低订单处理器将首先返回数据。
而且,在并行机器上,可以使用各种方法在处理器之间分割数据。例如,以“a”结尾的所有字符串可能会转到一个处理器。所有这些以“b”结束于另一个。这些可以在本地排序,但结果本身不会整体排序。
保证分类后的mysql等数据库正在做一个糟糕的设计决策。除了不符合标准之外,这些数据库要么限制算法的选择,要么对订购进行额外的处理。
+1了解,但我不相信你提供这样的保证,除非你可以提供参考。版本5.0的文档似乎另有说明。 –
- 1. 按照自定义标准对搜索结果进行排序
- 2. GROUP BY,排序结果futher
- 3. Hibernate的标准GROUP BY和顺序按
- 4. 的Mysql按日期排序和group by结果不同
- 5. Smalltalk:按照两个标准对集合进行排序
- 6. 按照两个标准对数组进行排序
- 7. 避免在SQL Server GROUP BY中进行不必要的排序?
- 8. 如何按照层次级别对SQL请求的结果进行排序
- 9. 该代码不应该按照标准中的12.8p2进行编译?
- 10. 如何通过频繁值对“GROUP BY”查询结果进行排序?
- 11. SQL GROUP BY,HAVING和排序(MySQL的)
- 12. LINQ Group by排序
- 13. MYSQL排序GROUP BY
- 14. 排序GROUP BY agregats
- 15. SQL组按特定标准排序,然后按不同标准在组内进行排序
- 16. 是否可以在Zend Lucene搜索结果上执行GROUP BY?
- 17. SQL GROUP BY/COUNT即使没有结果
- 18. 使用另一个GROUP BY过滤GROUP BY结果以进行修剪
- 19. MinMaxScaler sklearn:我是否应该对类标签进行标准化?
- 20. 对Sql Profiler结果进行排序
- 21. 对搜索结果进行排序sql
- 22. MySQL GROUP BY并按列排序组
- 23. MySQL - 按count()和GROUP BY排序
- 24. Oracle sql:通过GROUP BY ROLLUP排序
- 25. GROUP BY在SQL是不是给正确的结果
- 26. 结果排序该行
- 27. Group By正在排序我不想要的结果集...?
- 28. 的MySQL GROUP BY与排序
- 29. 任何标准SQL表达式对结果进行排序基地表达
- 30. SQL Group按日期排序
其实,订购不是*必需*。我会同意它几乎总是这样做,因为不这样做会大大降低性能,但它不是我见过的任何SQL标准所要求的。问题是否按照任何标准执行了“GROUP BY”排序顺序,并且对该问题的答案是“否”。 :) –
@KenWhite - 这就是为什么我决定增加更多的细节来解释OP已经观察和预期的内容之前,我已经upvoted你的答案。 :-) –
为什么我没有降低你的评分,即使它在技术上不是问题的答案。我也想澄清你在说什么,但是,也就是我的意见。 :-) –