Программирование >>  Руководство по sql 

1 ... 36 37 38 [ 39 ] 40 41 42 ... 105


можно использовать для офаничения числа строк, участвующих в афегирующих вычислениях. С помощью следующего оператора вычисляется средний расход по книгам и годовой доход от продаж по всем сфокам таблицы 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 Векторный

агрегирующий запрос

NULL

NULL

Business

13.73

mocl cook

11.49

popular comp

21.48

psychology

; 13.50

trad cook

\ 15.96

Несколько

возвращаемых значений

Рис. 6.1. Скалярные и векторные агрегирующие функции



1 ... 36 37 38 [ 39 ] 40 41 42 ... 105

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика