GROUP BY本身是否意味着DISTINCT?

时间:2014-12-17 15:56:42

标签: sql postgresql

我相信SQL中的GROUP BY会使DISTINCT变得不必要,因为如果按列分组,那么结果中只会有一个值,但我想确保正确理解关键字。是不是你不需要这样做:

SELECT DISTINCT a_uuid
FROM table
GROUP BY a_uuid
HAVING NOT bool_or(type = 'Purchase')

因为你可以完全放弃DISTINCT吗?

3 个答案:

答案 0 :(得分:3)

此查询中不需要distinct。通常,您distinct group by不需要distinct。实际上有一些查询将group bygroup by放在一起,但它们非常罕见。

此查询中需要having,因为您在SELECT a_uuid FROM table GROUP BY a_uuid HAVING NOT bool_or(type = 'Purchase') 子句中使用了聚合函数。所以,使用:

{{1}}

答案 1 :(得分:2)

只要不涉及聚合函数,您就可以使用DISTINCT而不是GROUP BY。

使用DISTINCT或GROUP BY - 而不是两者!

答案 2 :(得分:1)

如果您只想删除重复项,请使用DISTINCT。如果要应用聚合运算符(MAX,SUM,GROUP_CONCAT,...或HAVING子句),请使用GROUPY BY。

如果您对多列使用DISTINCT,则结果集将不会按GROUP BY分组,并且您不能将聚合函数与DISTINCT一起使用。

总的来说,这两者在功能问题上有所不同,但是,这两者在特定数据集中返回相同的输出。