前几天我学了一些关于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与聚合函数的使用。
当前回答
如果对多个列使用DISTINCT,结果集将不会像使用GROUP BY那样进行分组,并且不能对DISTINCT使用聚合函数。
其他回答
group by用于聚合操作——比如当您想要获得按列C分解的b的计数时
select C, count(B) from myTbl group by C
Distinct就是它听起来的样子——你得到唯一的行。
在sql server 2005中,查询优化器似乎能够优化掉我运行的简单示例中的差异。不过,不知道你是否能在所有情况下都指望它。
在使用方面,GROUP BY用于对要计算的行进行分组。DISTINCT将不做任何计算。它不会显示重复的行。
如果我想要呈现无重复的数据,我总是使用DISTINCT。
如果我想做计算,比如合计芒果的总数,我会使用GROUP BY
对于你发布的查询,它们是相同的。但对于其他查询,这可能不是真的。
例如,它不等同于:
SELECT C FROM myTbl GROUP BY C, D
你之所以注意到这一点,是因为你只选择了一列。
尝试选择两个字段,看看会发生什么。
Group By的用法如下:
SELECT name, SUM(transaction) FROM myTbl GROUP BY name
这将显示每个人的所有交易的总和。
在Hive (HQL)中,GROUP BY可以比DISTINCT快得多,因为前者不需要比较表中的所有字段。
参见:https://sqlperformance.com/2017/01/t-sql-queries/surprises-assumptions-group-by-distinct。