|
Программирование >> Руководство по sql
можно использовать для офаничения числа строк, участвующих в афегирующих вычислениях. С помощью следующего оператора вычисляется средний расход по книгам и годовой доход от продаж по всем сфокам таблицы titles. SQL: select avg (advance), suin(ytd sales) from titles Результат: 5962.5 97446 Для получения аналогичных результатов только для книг по бизнесу можно выполнить следующий запрос: SQL: select avg(advance), sum(ytd sales) from titles where type = business Результат: 6281.25 30788 Как взаимодействуют предложение WHERE и афегирующие функции? Сначала выполняется предложение WHERE, в результате чего находятся все книги по бизнесу. Затем к выбранным сфокам применяются афегирующие функции. Нулевые значения и агрегирующие функции. Если в столбце, к которому применяется агрегирующая функция, имеются нулевые (NULL) значения, они просто игнорируются. Например, при подсчете количества значений в столбцах advance и title таблицы titles с использованием функции COUNT получаются разные результаты, так как в столбце advance содержится два нулевых значения: SQL: select count(advance) from titles Результат: SQL: select count(title) from titles Результат: 1? Исключением является функция COUNT(*), которая всегда подсчитывает общее количество сфок, независимо от наличия в них нулевых значений. Если условиям запроса не удовлетворяет ни одна сфока, функция COUNT возвращает нуль. Все другие функции в этом случае возвращают значение NULL. Ниже приведен соответствующий пример: SQL: select count(distinct title) from titles where type = poetry Результат: SQL: select avg(advance) from titles where type = poetry Результат: NULL СКАЛЯРНЫЕ И ВЕКТОРНЫЕ ФУНКЦИИ в следующей главе рассматриваются предложение GROUP BY и использование афегирующих функций с фуппами для получения массива значений (по одному на фуппу). Кроме того, описываются предложение HAVING и векторные агрегирующие функции. Глава 6 Группировка данных и построение отчетов ГРУППИРОВКА в предыдущей главе рассматривались особенности оператора SELECT: использование ключевого слова DISTINCT и предложения ORDER BY. В ней также было введено понятие агрегирующих функций, которые применялись ко всей таблице в целом. Однако это всего лищь частный случай их использования. На практике агрегирующие функции чаще используются в комбинации с предложением GROUP BY. В этой главе основное внимание уделяется предложению GROUP BY, которое возвращает в результате группы строк, и предложению HAVING, с помощью которого можно задать условия отбора в предложении GROUP BY. Кроме того, в этой главе подводятся итоги использования в базах данных нулевых значений. ПРЕДЛОЖЕНИЕ GROUP BY Предложение GROUP BY неразрывно связано с афегирующими функциями, без них оно практически не используется. Предложение GROUP BY разделяет таблицу на наборы, а афегирующая функция вычисляет для каждого из них итоговое значение. Эти значения называются афегирующим вектором. (В предыдущей главе рассмафивались скалярные афегирующие функции, которые в результате возвращали единственное значение.) На рис. 6.1 представлены примеры запросов, в которых использованы скалярные и векторные афегирующие функции. select avg(price) from titles Скалярный агрегирующий запрос 14.77 \ select type, avg(price) Единственное о ! titles у возвращаемое значение group by type \ Type Векторный агрегирующий запрос
возвращаемых значений Рис. 6.1. Скалярные и векторные агрегирующие функции
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |