前几天我学了一些关于SQL的简单知识:

SELECT c FROM myTbl GROUP BY C

结果与:

SELECT DISTINCT C FROM myTbl

我好奇的是,SQL引擎处理命令的方式有什么不同,还是它们真的是一样的东西?

我个人更喜欢独特的语法,但我相信这更多是出于习惯而不是其他原因。

编辑:这不是一个关于聚合的问题。理解了GROUP BY与聚合函数的使用。


当前回答

没有区别(至少在SQL Server中)。两个查询使用相同的执行计划。

http://sqlmag.com/database-performance-tuning/distinct-vs-group

如果有子查询,可能会有区别:

http://blog.sqlauthority.com/2007/03/29/sql-server-difference-between-distinct-and-group-by-distinct-vs-group-by/

没有区别(oracle风格):

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:32961403234212

其他回答

通常我们可以使用DISTINCT来消除表中特定列上的重复项。

在'GROUP BY'的情况下,我们可以应用聚合函数像 AVG, MAX, MIN, SUM和COUNT在特定列和获取 列名和它的聚合函数在同一列上产生。

例子:

select  specialColumn,sum(specialColumn) from yourTableName group by specialColumn;

它们具有不同的语义,即使它们恰好在特定数据上具有相同的结果。

GROUP BY允许您使用聚合函数,如AVG、MAX、MIN、SUM和COUNT。 另一方面,DISTINCT只是删除重复项。

例如,如果你有一堆购买记录,你想知道每个部门花了多少钱,你可能会这样做:

SELECT department, SUM(amount) FROM purchases GROUP BY department

这将为每个部门提供一行,其中包含部门名称和该部门所有行中所有金额值的总和。

如果你使用的GROUP BY没有任何聚合函数,那么在内部它将被视为DISTINCT,所以在这种情况下,GROUP BY和DISTINCT之间没有区别。

但是,当提供DISTINCT子句时,最好使用它来查找唯一的记录,因为GROUP BY的目标是实现聚合。

在这个特定的查询中没有区别。但是,当然,如果您添加任何聚合列,那么就必须使用group by。