Подсчитаем среднее для всех значений стоимости товаров из таблицы PRODUCTS_TBL.
SELECT AVG(COST)
FROM PRODUCTS_TBL;
AVG(COST)
-----------
13.5891667
В некоторых реализациях SQL результат будет округлен до точности, заданной типом значений в столбце.
В следующем примере в одном запросе используются две функции. Поскольку одним служащим платят ставку, а другим - почасово, можно подсчитать средние значения и для столбца PAY_RATE, и для столбца SALARY.
SELECT AVG(PAY_RATE), AVG(SALARY)
FROM PRODUCTSJTBL;
AVG(PAY_RATE) AVG(SALARY)
13.5833333 30000
Функция MAX используется для подсчета максимума для значений заданной группы строк. Значения NULL при этом игнорируются. Можно использовать также ключевое слово DISTINCT, но поскольку повторно встречающиеся значения на значение максимума не влияют, это ключевое слово оказывается в данном случае бесполезным.
МАХ([ DISTINCT ] имя_столбца )
SELECT MAX (SALARY) Нахождение максимальной зарплаты
FROM EMPLOYEE_PAY_TBL;
SELECT MAX (DISTINCT SALARY) Нахождение максимальной зарплаты без учета
FROM EMPLOYEE_PAY_TBL; повторяющихся значений
Подсчитаем максимум всех значений стоимости товаров из таблицы PRODUCT SJTBL.
SELECT MAX(COST)
FROM PRODUCTS_TBL;
MAX(COST)
------------------
59.99
Функция MIN используется для подсчета минимума для значений заданной группы строк. Значения NULL при этом игнорируются. Можно использовать также ключевое слово DISTINCT, но поскольку повторно встречающиеся значения на значение минимума не влияют, это ключевое слово оказывается в данном случае бесполезным.
MIN([ DISTINCT ] имя_столбца )
SELECT MIN (SALARY) Нахождение минимальной зарплаты
FROM EMPLOYEE_PAY_TBL;
SELECT MIN (DISTINCT SALARY) Нахождение минимальной зарплаты без уче-
FROM EMPLOYEE_PAY_TBL; та повторяющихся значений
Подсчитаем минимум всех значений стоимости товаров из таблицы PRODUCTSJTBL.
SELECT MIN(COST)
FROM PRODUCTS_TBL;
MIN(COST)
-----------
1.05
При использовании итоговых функций с ключевым словом DISTINCT не забывайте о том, что в этом случае запрос может возвращать неверные результаты Ведь основной задачей этих функций является получение итоговых подсчетов для всех строк данных таблицы.
Наконец, рассмотрим пример комбинирования итоговых функций с арифметическими операциями.
SELECT COUNT(ORD_NUM), SUM(QTY),
SUM(QTY) / COUNT(ORD_NUM) AVG_QTY
FROM ORDERS_TBL;
COUNT(ORD_NUM) SUM(QTY) AVG_QTY
------------- ------- -------
7 160 22.85743
Здесь подсчитано число заказов, указана общая сумма стоимости всех заказов и с помощью деления второй величины на первую вычислена средняя стоимость заказа. Для представления последней создан псевдоним столбца - AVG_QTY.
Итоговые функции несложно использовать и они могут оказаться весьма полезными. Вы теперь знаете, как подсчитать число значений в столбце, число строк в таблице, как найти максимальное или минимальное из всех значений в столбце. Помните о том, что при использовании итоговых функций значение NULL не учитывается - исключением является функция COUNT в формате COUNT (*).
Итоговые функции являются первыми из рассмотренных нами функций SQL, но они не единственные и существует множество других. Итоговые функции используются также для группирования значений, что предполагается рассмотреть в ходе следующего урока. По мере изучения других функций, вы обнаружите, что в основном они имеют похожий синтаксис и что лежащие в их основе концепции достаточно просты.
Почему при использовании функций MIN и МАХ значение NULL игнорируется?
Значение NULL означает, что в поле ничего нет.
Почему при использовании функции COUNT тип данных не играет значения?
Функция COUNT просто считает строки.
Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".
1. Верно ли следующее утверждение: "Функция AVG возвращает среднее для значений всех строк, включая значения NULL?"
2. Верно ли следующее утверждение: "Функция зим используется для суммирования итоговых значений по столбцам?"
3. Верно ли следующее утверждение: ''Функция COUNT (* ) подсчитывает число всех строк в таблице?"
4. Будут ли работать следующие операторы SELECT? Если нет, то что в них следует исправить?