ГРУППОВЫЕ ФУНКЦИИ. Групповые функции Групповые функции работают с множествами строк и возвращают один результат на группу. Групповые функции могут быть.

Презентация:



Advertisements
Похожие презентации
Базы данных Язык запросов SQL. Команда SELECT (продолжение)
Advertisements

Презентация на тему: Ключевое слово TOP n [PERCENT] [WITH TIES]
СУБД 5. SQL для выборки данных. 2 SELECT Обработка элементов оператора SELECT выполняется в следующей последовательности: FROM – определяются имена используемых.
Содержание: 1. Управление данными. а) Извлечение данных команда SELECT; б) Полный список разделов. 2. Раздел SELECT. а) Синтаксис раздела SELECT; б) Ключевые.
Базы данных Язык запросов SQL. Команда SELECT. Команда SELECT – выборка данных Общий синтаксис: SELECT [{ ALL | DISTINCT }] { список_вывода | * } FROM.
СУБД 7. Использование подзапросов в языке запросов SQL.
СУБД MySQL - клиент-серверная СУБД Числовые(целые,действительные) Существует несколько разных типов целых чисел, различающихся количеством байтов данных,
СУБД Microsoft Access 2003 Элементы языка SQL. Язык SQL SQL (Structured Query Language) – структурированный язык запросов Язык SQL применяется во многих.
Выражения унарные (унарный минус) арифметические (+, -, *, /) сравнения (, =, =, , LIKE, BETWEEN...) конкатенации (||) логические (NOT, AND, OR)
Язык SQL Последовательности Представления Индексы.
1 БАЗЫ ДАННЫХ Использование SQL для построения запросов. ЗАНЯТИЕ 6 ПУГАЧЁВ Ю.В. Учитель информатики Харьковская общеобразовательная школа І-ІІІ ступеней.
Язык SQL
А.М. Гудов 1 Выборка данных ПОДЗАПРОСЫ. А.М. Гудов 2 Что такое подзапрос? Синтаксис команды SELECT SELECT...FROM...WHERE... Синтаксис SELECT (SELECT...FROM...WHERE...);
Основы SQL Запросы к базе данных. Что такое база данных SQL? SQL (Structured Query Language - «Структурированный язык запросов») - универсальный компьютерный.
Объединение таблиц Подзапросы. Оператор SELECT дает возможность выборки информации сразу из нескольких таблиц, которые перечислены в списке FROM. Такая.
СУБД Access Запросы Автор: Тутыгин В.С.. Назначение запросов Запросы обеспечивают простой доступ к определенному подмножеству записей одной или нескольких.
БАЗЫ ДАННЫХ ЛЕКЦИЯ 12. тема: ОСНОВЫ ЯЗЫКА SQL Общие сведения SQL структурированный язык запросов (Structured Query Language)
Базы данных в электронных таблицах 1. Представление базы данных в виде таблицы и формы.
Запросы в базе данных. Понятия запроса При работе с таблицами можно в любой момент выбрать из базы данных необходимую информацию с помощью запросов. Запрос.
Язык QBE Язык QBE -общая характеристика Табличный двумерный язык, основанный на реляционном исчислении. Декларативный язык. Язык четвертого поколения (4.
Транксрипт:

ГРУППОВЫЕ ФУНКЦИИ

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

Предложения GROUP BY и HAVING команде SELECT: синтаксис SELECTcolumn, group_function FROM table [WHEREcondition] [GROUP BYgroup_by_expression] [HAVINGgroup_condition] [ORDER BYcolumn]; Предложение GROUP BY делит строки на группы. Предложение HAVING исключает из рассмотрения некоторые группы.

Групповые функции AVG(DISTINCT|ALL|n) COUNT(DISTINCT|ALL|выражение|*) МАХ(DISTINCT |ALL|выражение) МIN(DISTINCT |ALL|выражение) STDDEV(DISTINCT|ALL|n) SUM(DISTINCT|ALL|n) VARIANCE(DISTINCT|ALL|n)

Групповые функции: пример Функции AVG и SUM применяются к столбцам с числовыми данными. SQL> SELECT AVG(salary),MAX(salary), 2 MIN(salary),SUM (salary) 3 FROM s_emp 4 WHERE UPPER(title) LIKE 'SALES%; Функции MAX и MIN применяются к данным любого типа. SQL> SELECT MIN(last_name),MAX(last_name) 2 FROM s_emp;

Функция COUNT: примеры COUNT(*) возвращает количество строк в таблице SQL> SELECT COUNT(*) 2 FROM s_emp 3 WHERE dept_id =31; COUNT(expr) возвращает количество строк с определенными значениями (не NULL). SQL> SELECT COUNT(commission_pct) 2 FROM s_emp 3 WHERE dept_id=31;

Предложение GROUP BY: синтаксис SELECT столбец, групповая_функция FROM таблица [WHERE условие] [GROUP BY выражение_группирования] [ORDER BY столбец]; Предложение GROUP BY разбивает строки таблицы на группы. Если в списке SELECT заданы столбцы, их список должен использоваться и в предложении GROUP BY. С помощью предложения ORDER BY можно изменить порядок сортировки, используемый по умолчанию.

Предложение GROUP BY: пример Все столбцы из списка SELECT, не входящие в групповые функции, должны быть включены в предложение GROUP BY. Столбец, заданный в предложении GROUP BY, не обязательно должен быть задан в предложении SELECT. Если столбец из предложения GROUP BY входит в список SELECT, результат имеет больше смысла. SQL> SELECT title, MAX(salary) 2 FROM s_emp 3 GROUP BY title;

Недействительные запросы с групповыми функциями Если предложение GROUP BY отсутствует или неправильно, выдается сообщение об ошибке. Все столбцы или выражения из списка SELECT, не являющиеся групповой функцией, должны быть включены в предложение GROUP BY. SQL> SELECT region_id,COUNT (name) 2 FROM s_dept; SELECT region_id,COUNT (name) * ERROR at line 1: ORA-00937:not a single-group group function

Группы внутри групп: примеры Для получения сводных результатов по нескольким группам и подгруппам следует указать в предложении GROUP BY более одного столбца. Порядок сортировки, используемый по умолчанию, определяется порядком столбцов в предложении GROUP BY. SQL> SELECT dept_id,title,COUNT(*) 2 FROM s_emp 3 GROUP BY dept_id,title;

Предложение HAVING: синтаксис SELECTстолбец, групповая_функция FROMтаблица [WHEREусловие] [GROUP BYвыражения_группирования] [HAVINGусловие_группы] [ORDER BYстолбец] ; Предложение HAVING используется для дальнейшего ограничения количества групп. - Шаг 1: Группирование строк. - Шаг 2: Применение групповых функций к группам. - Шаг 3: Вывод групп, удовлетворяющих условию предложения HAVING.

Предложение HAVING: пример Группа "President" в выходных данных отсутствует, т.к. не удовлетворяет заданному критерию. SQL> SELECT title, SUM(salary) PAYROLL 2 FROM s_emp 3 WHERE title NOT LIKE 'VP%' 4 GROUP BY title 5 HAVING SUM(salary) > ORDER BY SUM (salary);

Пример Вывод номера отдела и средней заработной платы для отделов, где средняя заработная плата превышает SQL> SELECTdept_id,AVG(salary) 2 FROM s_emp 3 WHEREAVG (salary) > GROUP BY dept_id; WHERE AVG(salary) >2000 * ERROR at line 3: ORA-00934:group function is not allowed here (Использование здесь групповой функции невозможно)

Вместо этого для ограничения количества групп следует использовать предложение HAVING. SQL> SELECTdept_id, AVG (salary) 2 FROM s_emp 3 GROUP BY dept_id 4 HAVINGAVG(salary) >2000; DEPT_ID AVG(SALARY)

ВЛОЖЕННОСТЬ ГРУППОВЫХ ФУНКЦИЙ Групповые функции могут быть вложены на глубину не более 2 уровней Вложенные функции вычисляются от внутреннего уровня к внешнему Предложение GROUP BY в запросе с вложенной групповой функцией обязательно в любом случае

ВЛОЖЕННОСТЬ ГРУППОВЫХ ФУНКЦИЙ: ПРИМЕР SQL> SELECT MAX(AVG(salary)) 2 FROM s_emp 3 GROUP BY title; Вычисление максимального среди средних размеров заработной платы по всем должностям

Заключение Имеется семь групповых функций: AVG, COUNT, MAX, MIN, STDDEV, SUM, VARIANCE. С помощью предложения GROUP BY создаются группы. Некоторые группы исключаются с помощью предложения HAVING. SELECTcolumn, group_function FROM table [WHEREcondition] [GROUP BYgroup_by_expression] [HAVINGgroup_condition] [ORDER BYcolumn] ;

Аналитические функции В версии СУБД Oracle появился новый класс из 26 функций, названных аналитическими, и получившим дальнейшее развитие в версии 9. Их описания были созданы совместными усилиями фирм IBM, Informix, Oracle и Compaq путем разработки так называемых "улучшений" некоторых конструкций, имеющихся в стандарте SQL1999. версии 9

Сравнение с обычными функциями агрегирования Многие аналитические функции действуют подобно обычным скалярным функциям агрегирования SUM, MAX и прочим, примененным к группам строк, сформированным с помощью GROUP BY. Однако обычные функции агрегирования уменьшают степень детализации, а аналитические функции нет.

Поясняющий сравнительный пример SELECT deptno, job, SUM(sal) sum_sal FROM emp GROUP BY deptno, job; SELECT ename, deptno, job, SUM(sal) OVER (PARTITION BY deptno, job) sum_sal FROM emp;

Результат первого запроса

Результат второго запроса

Разбиение данных на группы для вычислений Аналитические функции агрегируют данные порциями (partitions; группами), количество и размер которых можно регулировать специальной синтаксической конструкцией. Ниже она указана на примере агрегирующей функции SUM: SUM(выражение 1) OVER([PARTITION BY выражение 2 [, выражение 3 [, …]]])

Разбиение данных на группы для вычислений Если PARTITION BY не указано, то в качестве единственной группы для вычислений будет взят полный набор строк: SELECT ename, deptno, job, SUM(sal) OVER () sum_sal FROM emp;

Результат последнего запроса

Упорядочение в границах отдельной группы С помощью синтаксической конструкции ORDER BY строки в группах вычислений можно упорядочивать. Синтаксис иллюстрируется на примере агрегирующей функции SUM: SUM(выражение 1) OVER([PARTITION …] ORDER BY выражение 2 [,…] [{ASC|DESC}] [{NULLS FIRST|NULLS LAST}]) Правила работы ORDER BY - как в обычных SQL-операторах.

Пример SELECT ename, deptno, job, SUM(sal) OVER (PARTITION BY deptno, job ORDER BY hiredate) sum_sal FROM emp;

Результат

Выполнение вычислений для строк в группе по плавающему окну (интервалу) Для некоторых аналитических функций, например, агрегирующих, можно дополнительно указать объем строк, участвующих в вычислении, выполняемом для каждой строки в группе. Этот объем, своего рода контекст строки, называется "окном", а границы окна могут задаваться различными способами.

Синтаксис {ROWS | RANGE} {{UNBOUNDED | выражение} PRECEDING | CURRENT ROW } {ROWS | RANGE} BETWEEN {{UNBOUNDED PRECEDING | CURRENT ROW | {UNBOUNDED | выражение 1}{PRECEDING | FOLLOWING}} AND {{UNBOUNDED FOLLOWING | CURRENT ROW | {UNBOUNDED | выражение 2}{PRECEDING | FOLLOWING}}

Выполнение вычислений для строк в группе по плавающему окну (интервалу) Фразы PRECEDING и FOLLOWING задают верхнюю и нижнюю границы агрегирования (то есть интервал строк, "окно" для агрегирования). Вот поясняющий пример, воспроизводящий результат из предыдущего раздела: SELECT ename, deptno, job, SUM(sal) OVER (PARTITION BY deptno, job ORDER BY hiredate ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) sum_sal FROM emp;

Результат

Выполнение вычислений для строк в группе по плавающему окну (интервалу) Обратите внимание, что плавающий интервал задается в терминах упорядоченных строк (ROWS) или значений (RANGE), для чего фраза ORDER BY в определении группы обязана присутствовать.

Функции FIRST_VALUE и LAST_VALUE для интервалов агрегирования Эти функции позволяют для каждой строки выдать первое значение ее окна и последнее.

Пример SELECT ename, hiredate, sal, FIRST_VALUE(sal) OVER (ORDER BY hiredate ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) first_rows, LAST_VALUE(sal) OVER (ORDER BY hiredate ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) last_rows, FIRST_VALUE(sal) OVER (ORDER BY hiredate RANGE BETWEEN 2 PRECEDING AND CURRENT ROW) first_range, LAST_VALUE(sal) OVER (ORDER BY hiredate RANGE BETWEEN 2 PRECEDING AND CURRENT ROW) last_range FROM emp;

Результат

Интервалы времени Для интервалов (окон), упорядоченных внутри по значению ("логическом", RANGE) в случае, если это значение имеет тип "дата", границы интервала можно указывать выражением над датой, а не конкретными значениями из строк. Примеры таких выражений: INTERVAL число {YEAR | MONTH | DAY | HOUR | MINUTE | SECOND} NUMTODSINTERVAL(число, '{DAY | HOUR | MINUTE | SECOND}') NUMTOYMINTERVAL(число, '{YEAR | MONTH}')

Пример выдачи зарплат сотрудников и средних зарплат за последние полгода на момент приема нового сотрудника: SELECT ename, hiredate, sal, AVG(sal) OVER (ORDER BY hiredate RANGE BETWEEN INTERVAL '6' MONTH PRECEDING AND CURRENT ROW) avg_sal FROM emp;

Результат

CORR (выражение, выражение) Выдает коэффициент корреляции для пары выражений, возвращающих числовые значения. В статистическом смысле, корреляция это степень связи между переменными. Связь между переменными означает, что значение одной переменной можно в определенной степени предсказать по значению другой. Коэффициент корреляции представляет степень корреляции в виде числа в диапазоне от -1 (высокая обратная корреляция) до 1 (высокая корреляция). Значение 0 соответствует отсутствию корреляции

COVAR_POP( выражение, выражение) Возвращает ковариацию генеральной совокупности (population covariance) пары выражений с числовыми значениями.

COVAR_SAMP(выражение, выражение) Возвращает выборочную ковариацию (sample covariance) пары выражений с числовыми значениями.

CUME_DIST Вычисляет относительную позицию строки в группе.Функция CUME_DIST всегда возвращает число большее 0 и меньше или равное 1. Это число представляет "позицию" строки в группе из N строк. В группе из трех строк, например, возвращаются следующие значения кумулятивного распределения: 1/3, 2/3 и 3/3.

DENSE_RANK Эта функция вычисляет относительный ранг каждой возвращаемой запросом строки по отношению к другим строкам, основываясь на значениях выражений в конструкции ORDER BY. Данные в группе сортируются в соответствии с конструкцией ORDER BY, а затем каждой строке поочередно присваивается числовой ранг, начиная с 1. Ранг увеличивается при каждом изменении значений выражений, входящих в конструкцию ORDER BY. Строки с одинаковыми значениями получают один и тот же ранг (при этом сравнении значения NULL считаются одинаковыми). Возвращаемый этой функцией "плотный" ранг дает ранговые значения без промежутков.

Источник /oracle/anal-itiv.htm