2015-06-02 8 views
1

Я только что узнал, что ключевое слово DISTINCT разрешено в функциях MIN() и MAX(), но я не использую его.Какова цель ключевого слова DISTINCT в функциях группы Oracle MIN() и MAX()?

Не было бы вызова одной из вышеупомянутых функций, возвращающих тот же результат либо с ключевым словом DISTINCT, либо без него?

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

Я имею в виду, я получаю разницу в использовании DISTINCT ключевого слова на COUNT(), SUM() или AVG(), но я думаю, что это бесполезно и в MIN() и MAX()

+2

Yeap это бесполезно, но по-прежнему нет необходимости блокировать функциональность ключевого слова. –

+0

Возможно ли, что эта опция является общей для всех агрегированных/аналитических функций? Возможно, это функция парсера SQL. – ibre5041

ответ

0

Да , DISTINCT в MAX() и 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]. Очевидно, что результаты будут равны.

Смежные вопросы