Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec5.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
216.06 Кб
Скачать

Курс лекций “Базы данных и СУБД” Ульянов В.С.

Лекция Язык 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. Дисперсия вычисляется по следующей формуле: ((ni2)-1/k*((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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]