- •Раздел 1 sql
- •Раздел 1
- •1 Основные сведения о субд Oracle
- •2. Общие сведения о sql
- •3. Основные правила написания sql-операторов
- •4. Инструкции dml
- •5. Инструкция select
- •6. Предложения select и from
- •7. Отбор строк (предложение where)
- •8. Многотабличные запросы
- •9. Многотабличные запросы на выборку в Oracle
- •10. Предложения group by и having
- •11. Статистические функции
- •12. Подчиненные запросы (подзапросы)
- •13. Добавление данных (инструкция insert)
- •14. Удаление данных (инструкция delete)
- •15. Обновление данных (инструкция update)
- •16. Инструкции ddl
- •17. Стандартные Типы данных sql
- •18. Создание таблиц (инструкция create table)
- •19. Удаление таблицы (инструкция drop table)
- •20. Изменение определения таблицы (инструкция alter table)
- •21. Условия целостности данных
- •22. Создание представлений
- •23. Псевдонимы таблиц (инструкции create / drop synonym)
- •24. Индексы (инструкции create/drop index)
- •25. Последовательности (инструкция create/drop sequence)
- •26. Транзакции
- •27. Журнал транзакций. Проблемы обработки параллельных транзакций
- •28. Блокировки транзакций
- •29. Понятие транзакции и виды блокировок Oracle
- •30. Концепция многоверсионной модели согласованности по чтению
- •31. Управление транзакциями в Oracle
- •32. Принципы защиты данных в стандартном sql (без редакции)
- •33. Разрешение и запрещение ролей
- •34. Способы обеспечения безопасности в Oracle
- •Аутентификация
- •Профили
- •Привилегии
- •Для предоставления системных привилегий или ролей:
- •Для предоставления привилегий доступа к объектам схемы:
- •Для изъятия системных привилегий или ролей:
- •Для изъятия привилегий доступа к объектам:
- •Другие возможности обеспечения безопасности
11. Статистические функции
Для подведения итогов по информации, содержащейся в базе данных, в SQL предусмотрены статистические (агрегатные) функции. Статистическая функция принимает в качестве аргумента какой-либо столбец данных целиком, а возвращает одно значение, которое определенным образом подытоживает этот столбец, исключая все пустые значения.
В стандарте SQL указано пять статистических функций, которые позволяют получать различные виды итоговой информации:
- SUM() – для вычисления суммы всех значений столбца-аргумента;
- AVG() – для вычисления среднего значения столбца;
- MIN() – определяет минимальное значение столбца;
- MAX() – определяет максимальное значение столбца;
- COUNT() – подсчитывает число всех определенных значений столбца;
- COUNT(*) – подсчитывает число строк таблицы.
Аргументом статистической функции может быть простое имя столбца или выражение.
В Oracle применяется более 20 статистических функций, например, добавлены такие функции, как:
CORR() - определяет коэффициент корреляции пар;
KEEP() - используется для работы со множеством значений, отобранных SUM(), MIN(), MAX();
PERCENT_RANK() - вычисляет относительную позицию строки;
RANK() - вычисляет ранг строки по отношению к другим строкам в группе (используется с ORDER BY) и др.
Приведем примеры запросов со стандартными статистическими функциями:
Определить среднемесячную и среднегодовую зарплату сотрудников предприятия
SELECT AVG(salary) AS per_month, AVG(12*salary) AS per_year
FROM staff;
В примере в списке возвращаемых столбцов результирующего множества используются псевдонимы столбцов, иначе значения в возвращаемой строке были бы представлены под именами avg(salary) и avg(12*salary).
Тип данных столбца-аргумента функции COUNT() может быть любым (не обязательно числовым, в отличие от других статистических функций), а возвращает она всегда целое число независимо от типа данных столбца. Например, следующий запрос подсчитывает количество работающих на предприятии менеджеров:
SELECT count (sno)
FROM staff
WHERE position=‘менеджер’;
Следует заметить, что для функции COUNT() важны не конкретные значения ячеек, а количество ячеек, удовлетворяющих заданному критерию.
В отличие от функции COUNT() статистическая функция COUNT(*) подсчитывает строки, а не значения в них. Функция COUNT() не учитывает NULL-значений в столбцах, также как и любая другая статистическая функция.
В SQL существует ряд ограничений на применение статистических функций в инструкциях SELECT:
1. в списке возвращаемых столбцов можно указывать любую статистическую функцию, она также может входить в выражение, в котором суммируются или вычитаются значения двух и более статистических функций, однако статистическая функция не может быть аргументом для другой такой функции, поскольку получающееся в таком случае выражение не имеет смысла.
2. в списке возвращаемых столбцов нельзя одновременно указывать статистическую функцию и обычные имена столбцов, поскольку в этом также нет смысла.
3. разрешается использовать предикат DISTINCT во всех статистических функциях, но в одном запросе можно употребить только один раз. Если он применяется вместе с аргументом одной из статистических функций, его нельзя использовать ни с одним другим аргументом. Если он указан перед списком возвращаемых столбцов, его нельзя употреблять ни в одной статистической функции. Единственным исключением из этого правила является случай, когда предикат DISTINCT используется внутри подчиненного запроса, входящего в запрос, в котором он уже применяется.
В целом статистические функции могут использоваться только в SELECT и HAVING, при чем, если они есть в SELECT, а в GROUP BY нет, то никакие другие столбцы в списке SELECT быть не могут.
В стандарте ANSI/ISO сказано, что значения NULL статистическими функциями игнорируются и определены следующие точные правила обработки значений NULL в статистических функциях:
если какие-либо из значений, содержащихся в столбце, равны NULL, при вычислении результата функции они исключаются;
если все значения в столбце равны NULL, то функции SUM(), AVG(), MIN() и MAX() возвращают значение NULL; функция COUNT() возвращает ноль;
если в столбце нет значений (т.е. столбец пустой), то функции SUM(), AVG(), MIN() и MAX() возвращают значение NULL; функция COUNT() возвращает ноль;
функция COUNT(*) подсчитывает количество строк и не зависит от наличия или отсутствия в столбце значений NULL; если строк в таблице нет, эта функция возвращает ноль.
Хотя эта часть стандарта определена достаточно четко, коммерческие СУБД могут выдавать результаты, отличающиеся от стандарта, особенно если все значения, содержащиеся в столбце, равны NULL или таблица пуста. Поэтому, прежде чем полагаться на стандартные правила, следует проверить используемую СУБД.