Oracle MIN()和MAX()组函数中DISTINCT关键字的用途是什么?

时间:2015-06-02 14:06:46

标签: oracle distinct

我刚刚发现在MIN()和MAX()函数中允许使用DISTINCT关键字,但我没有使用它。

对于上述某个函数的调用是否会返回相同的结果,无论是否有DISTINCT关键字?

SELECT MAX(salary), MAX(DISTINCT salary) from EMPLOYEES;

我的意思是,我在COUNT(),SUM()或AVG()上使用DISTINCT关键字有所不同,但我认为MIN()和MAX()

都没用

1 个答案:

答案 0 :(得分:0)

是的,DISTINCTMAX()中的MIN()无效。在COUNT()中,所有值的SUM()AVG()结果与唯一值的结果不同。例如, -

with t as
(
    select 1 as val from dual union all
    select 1 as val from dual union all
    select 1 as val from dual union all
    select 2 as val from dual union all
    select 3 as val from dual
)
select 
    COUNT(val),             -- =5 (5 rows was selected)
    COUNT(distinct val),    -- =3 (3 rows with unicue value) 
    SUM(val),               -- =8 (1+1+1+2+3)
    SUM(distinct val),      -- =6 (1+2+3, only unique values)
    AVG(val),               -- =1,6 (sum()/count() = 8/5)
    AVG(distinct val)       -- =2 (sum(distinct)/count(distinct) = 6/3)
from t

Max(val)回答了这个问题 - “此列表[1,1,1,2,3]中的最大值是多少?”因此,Max(distinct val)应该在[1,2,3]值列表中查找最大值。显而易见,结果将是平等的。