gpt4 book ai didi

mysql - sql group by 与 distinct

转载 作者:IT老高 更新时间:2023-10-28 12:59:32 25 4
gpt4 key购买 nike

当查询中没有进行聚合时,为什么有人会使用 group by 而不是 distinct?

此外,是否有人通过 MySQL 和 SQL Server 中的不同性能考虑来了解该组。我猜 SQL Server 有一个更好的优化器,它们可能与那里相当,但在 MySQL 中,我预计会有明显的性能优势。

我对 dba 的答案很感兴趣。

编辑:

Bill 的帖子很有趣,但不适用。让我更具体一点...

select a, b, c 
from table x
group by a, b,c

select distinct a,b,c
from table x

最佳答案

GROUP BY 将行组映射到一行,根据特定列中的不同值,这些列甚至不一定必须在选择列表中。

SELECT b, c, d FROM table1 GROUP BY a;

这个查询是合法的SQL(更正:只在MySQL中;实际上它不是标准SQL,其他品牌不支持)。 MySQL 接受它,它相信您知道自己在做什么,以明确的方式选择 bcd,因为它们'是 functional dependencies a

但是,Microsoft SQL Server 和其他品牌不允许这种查询,因为它不能轻易确定函数依赖关系。 编辑: 相反,标准 SQL 要求您遵循 单值规则,即选择列表中的每一列必须在 GROUP BY< 中命名 子句或作为集合函数的参数。

DISTINCT 总是查看选择列表中的所有列,并且只查看那些列。 DISTINCT 允许您指定列是一个常见的误解:

SELECT DISTINCT(a), b, c FROM table1;

尽管括号使 DISTINCT 看起来像函数调用,但事实并非如此。这是一个查询选项,选择列表的三个字段中的任何一个字段中的不同值都将导致查询结果中的不同行。此选择列表中的表达式之一有括号,但这不会影响结果。

关于mysql - sql group by 与 distinct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/426723/

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