前几天我学了一些关于SQL的简单知识:
SELECT c FROM myTbl GROUP BY C
结果与:
SELECT DISTINCT C FROM myTbl
我好奇的是,SQL引擎处理命令的方式有什么不同,还是它们真的是一样的东西?
我个人更喜欢独特的语法,但我相信这更多是出于习惯而不是其他原因。
编辑:这不是一个关于聚合的问题。理解了GROUP BY与聚合函数的使用。
前几天我学了一些关于SQL的简单知识:
SELECT c FROM myTbl GROUP BY C
结果与:
SELECT DISTINCT C FROM myTbl
我好奇的是,SQL引擎处理命令的方式有什么不同,还是它们真的是一样的东西?
我个人更喜欢独特的语法,但我相信这更多是出于习惯而不是其他原因。
编辑:这不是一个关于聚合的问题。理解了GROUP BY与聚合函数的使用。
当前回答
如果你使用的GROUP BY没有任何聚合函数,那么在内部它将被视为DISTINCT,所以在这种情况下,GROUP BY和DISTINCT之间没有区别。
但是,当提供DISTINCT子句时,最好使用它来查找唯一的记录,因为GROUP BY的目标是实现聚合。
其他回答
GROUP BY允许您使用聚合函数,如AVG、MAX、MIN、SUM和COUNT。 另一方面,DISTINCT只是删除重复项。
例如,如果你有一堆购买记录,你想知道每个部门花了多少钱,你可能会这样做:
SELECT department, SUM(amount) FROM purchases GROUP BY department
这将为每个部门提供一行,其中包含部门名称和该部门所有行中所有金额值的总和。
对于你发布的查询,它们是相同的。但对于其他查询,这可能不是真的。
例如,它不等同于:
SELECT C FROM myTbl GROUP BY C, D
除了聚合函数的使用外,group by子句和distinct子句之间没有显著区别。 两者都可以用来区分值,但如果在性能的角度组由更好。 在使用distinct关键字时,内部采用排序操作,可在执行计划中查看。
试试简单的例子
Declare @tmpresult table
(
Id tinyint
)
Insert into @tmpresult
Select 5
Union all
Select 2
Union all
Select 3
Union all
Select 4
Select distinct
Id
From @tmpresult
当你指的是DISTINCT时,请不要使用GROUP BY,即使它们的工作方式是一样的。我假设您正在尝试从查询中减少毫秒数,我必须指出,开发人员的时间比计算机的时间要昂贵几个数量级。
它们具有不同的语义,即使它们恰好在特定数据上具有相同的结果。