【问题标题】:What's the purpose of DISTINCT keyword in Oracle MIN() and MAX() group functions?Oracle MIN() 和 MAX() 组函数中 DISTINCT 关键字的用途是什么?
【发布时间】:2015-08-16 09:11:49
【问题描述】:

我刚刚发现 MIN() 和 MAX() 函数中允许使用 DISTINCT 关键字,但我不知道如何使用它。

无论是否使用 DISTINCT 关键字,对上述函数之一的调用都不会返回相同的结果吗?

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

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

【问题讨论】:

  • 是的,它没用,但仍然不需要锁定关键字的功能。
  • 这个选项不可能对所有聚合/分析函数都通用吗?也许是 SQL 解析器特性。

标签: oracle distinct


【解决方案1】:

是的,MAX()MIN() 中的 DISTINCT 没用。在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] 值列表中查找最大值。很明显,结果将是相等的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-10
    • 2011-10-26
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2011-01-21
    相关资源
    最近更新 更多