在具有聚合函数的简单查询中使用DISTINCT是多余的

时间:2012-04-09 17:37:56

标签: sql sql-server oracle

带有聚合函数的简单查询中的DISTINCT是否有效?

select DISTINCT salesperson, SUM(sales_amt) from sales GROUP BY salesperson

我意识到DISTINCT 可以有更复杂的查询,例如:

select salesperson, SUM(DISTINCT sales_amt) from sales GROUP BY salesperson

(平台对该语法的支持可能会有所不同)

但我想确认在简单的查询示例中,DISTINCT是多余的。

编辑:修复缺少的GROUP BY销售员

3 个答案:

答案 0 :(得分:5)

假设您缺少GROUP BY salesperson(如果省略该组,则在SQL Server中无效),DISTINCT在您的第一个查询中是多余的。 GROUP BY通过汇总DISTINCT来有效地执行salesperson

select DISTINCT salesperson, SUM(sales_amt) from sales GROUP BY salesperson

正如您所指出的那样,您正确地将DISTINCT 放置在聚合SUM()内可能会产生不同的行集。

答案 1 :(得分:2)

SELECT DISTINCT [Col1], [Col2], ..., [ColN] FROM [Table]

与:

相同

SELECT [Col1], [Col2], ..., [ColN] FROM [Table] GROUP BY [Col1], [Col2], ..., [ColN]

DISTINCT之后的SELECT是“我希望GROUP BYSELECT中的每一列的简写。{p> {{1}}。是的,如果您已经需要,我会说这是多余的无论如何都是一个小组(如果你将在那里有一个聚合函数你会这样做。)

答案 2 :(得分:1)

您编写的查询都不会执行,因为您需要拥有该组以返回聚合(SUM())。你需要这样的东西:

SELECT SalesPerson
, SUM(Sales_AMT) AS SalesAmount
FROM Sales 
GROUP BY SalesPerson