Лекция Язык SQL. Групповые функции

Групповые функции работают с группами строк и возвращают один результат на каждую группу строк. При использовании групповых функций команда SELECT может включать предложения GROUP BY и HAVING. Команда имеет при этом следующий синтаксис:

SELECT столбец|выражение, …

FROM таблица, …
[WHERE условие]
[GROUP BY выражение_группирования]
[HAVING условие_включения_группы]
[ORDER BY столбец | выражение, … ];

где:

предложение GROUP BY группирует выбираемые строки на основе значения заданного выражения_группирования;
предложение HAVING ограничивает множество групп возвращаемых строк условием_включения_группы. В результат попадают только те группы, для которых условие истинно.

Групповые функции могут появляться в предложениях SELECT и HAVING. В случае, если в предложении SELECT встречается групповая функция, а предложение GROUP BY отсутствует, то групповая функция вычисляется для всего множества строк таблицы. Если предложение GROUP BY включено, то строки таблицы разбиваются на группы по значению выражения, указанного в предложении GROUP BY, и значение групповой функции вычисляется для каждой такой группы строк

В следующей таблице перечислены некоторые из групповых функций.

Функция Описание
AVG([DISTINCT | ALL ] n) Возвращает среднее значение n.
COUNT(* | [DISTINCT| ALL ] выражение) Возвращает количество строк в запросе. Если указано выражение, подсчитываются только те строки, в которых значение выражения не пусто. Если указана *, то подсчитываются все строки, включая повторяющиеся и строки с неопределенными значениями.
MAX([DISTINCT | ALL ] выражение) Возвращает максимальное значение выражения.
MIN([DISTINCT | ALL ] выражение) Возвращает минимальное значение выражения.
STDDEV([DISTINCT | ALL ] n) Возвращает стандартное отклонение n. Вычисляется как квадратный корень из дисперсии, определяемой групповой функцией VARIANCE.
SUM([DISTINCT | ALL ] n) Возвращает сумму значений n.
VARIANCE([DISTINCT | ALL ] n) Возвращает дисперсию n. Дисперсия вычисляется по следующей формуле: (S(ni2)-1/k*(S(ni))2)/(n-1), где ni – один из элементов множества n, k – число элементов, а сумма берется по всему множеству n. При k=1 дисперсия считается равной 0.

Каждая групповая функция допускает один аргумент. Многие групповые функции принимают опции ALL и DISTINCT. Если задана опция DISTINCT, групповая функция учитывает лишь неповторяющиеся значения своего аргумента. Если задана опция ALL (используется по умолчанию) – групповая функция учитывает все значения, включая повторения. Например, среднее значение чисел 1,1,1,3 с опцией DISTINCT – (1+3)/2=2, а с опцией ALL – (1+1+1+3)/4=1.5.

Все групповые функции, за исключением COUNT(*), игнорируют пустые значения. Для подстановки значения вместо пустого используйте функцию NVL. Если запрос с групповой функцией не возвращает ни одной строки, или возвращает лишь такие строки, которые содержат пустые значения аргумента групповой функции, то групповая функция возвращает NULL.

Функции AVG, SUM, STDDEV и VARIANCE могут применяться только к столбцам с числовыми данными, а функции MAX, MIN и COUNT – к столбцам любого типа.

Пример: Вывести минимальную, максимальную и среднюю зарплату по все служащим.

Так как требуется произвести расчет по всем служащим (то есть по всем строкам таблицы), предложение GROUP BY не используется.

SELECT MIN(salary), MAX(salary), AVG(salary)

FROM s_emp;

Результат:

MIN(SALARY) MAX(SALARY) AVG(SALARY)

----------- ----------- -----------

750 2500 1255,08

Пример: Вывести первую фамилию из алфавитного списка служащих.

SELECT MIN(last_name)

FROM s_emp;

Результат:

MIN(LAST_NAME)

----------------

Biri

Пример: Узнать общее количество служащих и количество служащих, получающих комиссионные.

В данном примере COUNT(*) подсчитает общее количество строк таблицы (то есть общее количество служащих). COUNT(commission_pct) подсчитает количество тех строк, в которых значение столбца commission_pct не пусто, то есть служащих, получающих комиссионные.

SELECT COUNT(*), COUNT(commission_pct)

FROM s_emp;

Результат:

COUNT(*) COUNT(COMMISSION_PCT)

--------- ---------------------

25 5


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: