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

SELECT c FROM myTbl GROUP BY C

结果与:

SELECT DISTINCT C FROM myTbl

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

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

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


当前回答

GROUP BY有一个非常具体的含义,它与distinct函数不同。

GROUP BY使用选择的表达式对查询结果进行分组,然后可以应用聚合函数,这些函数将作用于每个组,而不是整个结果集。

这里有一个例子可能会有所帮助:

给定一个这样的表:

name
------
barry
dave
bill
dave
dave
barry
john

这个查询:

SELECT name, count(*) AS count FROM table GROUP BY name;

将产生如下输出:

name    count
-------------
barry   2
dave    3
bill    1
john    1

这显然与使用DISTINCT非常不同。如果您想对结果进行分组,请使用group BY,如果您只想要特定列的唯一列表,请使用DISTINCT。这将使数据库有机会根据您的需要优化查询。

其他回答

如果您只想删除重复项,请使用DISTINCT。如果你想应用聚合操作符(MAX, SUM, GROUP_CONCAT,…),请使用GROUPY BY,或HAVING从句)。

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

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

例子:

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

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

我对它的理解是,使用distinct就相当于按照所选字段的顺序对它们进行分组。

i.e:

select distinct a, b, c from table;

等于:

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

对于你发布的查询,它们是相同的。但对于其他查询,这可能不是真的。

例如,它不等同于:

SELECT C FROM myTbl GROUP BY C, D