Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
68
Добавлен:
23.11.2017
Размер:
96.26 Кб
Скачать

10.1. Итоговые запросы на чтение

Многие запросы к БД не нуждаются в той степени детализации, которую обеспечивают SQL-запросы, рассмотренные в предыдущих примерах. Так, во всех запросах перечисленных далее, требуется узнать всего одно или несколько значений, которые подытоживают информацию, содержащуюся в БД:

какова сумма доходов у всех жителей?

каковы наибольший и наименьший общий доход отдельного жителя?

каков среднедушевой доход жителя Зеленограда?

каков среднедушевой доход жителей каждой квартиры?

сколько жителей в каждой квартире?

На языке SQL запросы такого типа можно создавать с помощью агрегатных функций и предложений GROUP BY и HAVING, используемых в операторе SELECT.

10.1.1. Агрегатные функции

Для подведения итогов по информации, содержащейся в БД, в SQL предусмотрены агрегатные функции. Агрегатная функция принимает в качестве аргумента какой-либо столбец данных целиком, а возвращает одно значение, которое определенным образом подытоживает этот столбец.

Например, агрегатная функция AVG( ) принимает в качестве аргумента столбец чисел и вычисляет их среднее значение.

Чтобы вычислить среднедушевой доход жителя Зеленограда, нужен такой запрос:

SELECT ‘СРЕДНЕДУШ.ДОХОД=’, AVG(SUMD)

FROM PERSON

В SQL имеется шесть агрегатных функций, которые позволяют получать различные виды итоговой информации (рис. 10.1):

SUM( ) вычисляет сумму всех значений, содержащихся в столбце;

AVG( ) вычисляет среднее среди значений, содержащихся в столбце;

MIN( ) находит наименьшее среди всех значений, содержащихся в столбце;

MAX( ) находит наибольшее среди всех значений, содержащихся в столбце;

COUNT( ) подсчитывает количество значений, содержащихся в столбце;

COUNT(*) подсчитывает количество строк в таблице результатов запроса.

Аргументом агрегатной функции может быть простое имя столбца, как в предыдущем примере, или выражение, как в следующем запросе, задающем вычисление среднедушевого налога:

SELECT AVG(SUMD*0.13)

FROM PERSON

При выполнении этого запроса создается временный столбец, содержащий значения (SUMD*0.13) для каждой строки таблицы PERSON, а затем вычисляется среднее значение временного столбца.

Сумму доходов у всех жителей Зеленограда можно вычислить с помощью агрегатной функции SUM:

SELECT SUM(SUMD) FROM PERSON

Агрегатная функция может быть использована и для вычисления итогов по таблице результатов, полученной соединением нескольких исходных таблиц. Например, можно вычислить общую сумму дохода, которая получена жителями от источника с названием “Стипендия”:

SELECT SUM(MONEYS)

FROM PROFIT, HAVE_D

WHERE PROFIT.ID=HAVE_D.ID

AND PROFIT.SOURCE=’Стипендия’

Агрегатные функции MIN( ) и MAX( ) позволяют найти соответственно наименьшее и наибольшее значения в таблице. При этом столбец может содержать числовые или строковые значения либо значения даты или времени.

Например, можно определить

(а) наименьший общий доход, полученный жителями, и наибольший налог, подлежащий уплате:

SELECT MIN(SUMD), MAX(SUMD*0.13)

FROM PERSON

(б) даты рождения самого молодого и самого старого жителя:

SELECT MIN(RDATE), MAX(RDATE)

FROM PERSON

(в) даты рождения самого первого и самого последнего жителя в списке, упорядоченном по алфавиту:

SELECT MIN(FIO), MAX(FIO)

FROM PERSON

Применяя эти агрегатные функции, нужно помнить, что числовые данные сравниваются по арифметическим правилам, сравнение дат происходит последовательно (более ранние значения дат считаются меньшими, чем более поздние), сравнение интервалов времени выполняется на основании их продолжительности.

При использовании функции MIN( ) и MAX( ) со строковыми данными результат сравнения двух строк зависит от используемой таблицы кодировки. На персональных компьютерах и мини-компьютерах, где используется таблица кодировки ASCII, в последовательности сортировки цифры идут перед буквами, а все прописные буквы предшествуют строчным буквам. На больших компьютерах (мэикфреймах) фирмы IBM (например, AS/400), где используется таблица кодировки EBCDIC, строчные символы расположены перед прописными, а цифры следуют за буквами.

Соседние файлы в папке БД лабы