gpt4 book ai didi

sql - ms access group 是否按结果排序?

转载 作者:行者123 更新时间:2023-12-04 22:29:32 24 4
gpt4 key购买 nike

我需要运行一个查询来对结果进行分组并对其进行排序。当我使用以下查询时,我注意到结果是按字段 name 排序的:

SELECT name, count(name) 
FROM contacts
GROUP BY name
HAVING count(name)>1

最初我打算使用以下查询:
SELECT name, count(name) 
FROM contacts
GROUP BY name
HAVING count(name)>1
ORDER BY name

我担心 的 命令会显着减慢运行时间。
我可以依靠 ms-access 始终按我分组的字段排序,并通过
消除 顺序吗?

编辑:我尝试对其他表中的不同字段进行分组,并且始终按分组字段进行排序。

我已经在其他 SQL DBMS 中找到了这个问题的答案,但没有找到。

最佳答案

GROUP BYORDER BY 一般如何工作

在为 GROUP BYDISTINCT 操作创建组时,数据库通常在排序和散列之间进行选择。如果他们选择排序,你可能会很幸运,并且排序在 GROUP BY 的应用和实际结果集消耗之间是稳定的。但是在稍后的某个时候,这可能会中断,因为数据库可能会突然更喜欢无序散列算法来生成组。

在任何数据库中,您都应该依赖任何隐式排序行为。您应该始终使用显式 ORDER BY 。如果数据库足够复杂,添加显式 ORDER BY 子句将暗示排序对于分组操作也是更优化的,因为排序可以在查询执行管道中重新使用。

这如何转化为您的观察

I tried grouping different fields in other tables and it was always ordered by the grouped field.



您是否详尽地尝试了所有可能表达的查询? IE。你有没有尝试过:
  • JOIN
  • OUTER JOIN
  • semi- JOIN (使用 EXISTSIN )
  • JOIN (使用 NOT EXISTSNOT IN )
  • 过滤
  • 按许多列分组
  • DISTINCT + GROUP BY(这肯定会破坏您的排序)
  • UNIONUNION ALL(无论如何都否定了这个论点)

  • 我打赌你没有。即使您尝试了上述所有方法,您能否确定没有一个非常奇特的配置会导致上述中断,仅仅因为您已经在一些(许多)实验中观察到了这种行为?

    你不能。

    MS Access 特定行为

    就 MS Access 而言,请考虑 documentation on ORDER BY

    Remarks
    ORDER BY is optional. However, if you want your data displayed in sorted order, then you must use ORDER BY.



    注意措辞。 “您必须使用 ORDER BY”。因此,MS Access 与其他数据库没有什么不同。

    答案

    所以你关于性能的问题是朝着错误的方向发展的。在这种情况下,您不能为了性能而牺牲正确性。通过使用索引更好地解决性能问题。

    关于sql - ms access group 是否按结果排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825064/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com