Получение итоговых значений

Как узнать количество моделей ПК, выпускаемых тем или иным поставщиком? Как определить среднее значение цены на компьютеры, имеющие одинаковые технические характеристики? На эти и многие другие вопросы, связанные с некоторой статистической информацией, можно получить ответы при помощи итоговых (агрегатных) функций. Стандартом предусмотрены следующие агрегатные функции:

названиеописание
COUNT(*)Возвращает количество строк источника записей
COUNTВозвращает количество значений в указанном столбце
SUMВозвращает сумму значений в указанном столбце
AVGВозвращает среднее значение в указанном столбце
MINВозвращает минимальное значение в указанном столбце
MAXВозвращает максимальное значение в указанном столбце

Все эти функции возвращают единственное значение. При этом функции COUNT, MIN и MAX применимы к данным любого типа, в то время как SUM и AVG используются только для данных числового типа. Разница между функцией COUNT(*) и COUNT(имя столбца | выражение) состоит в том, что вторая (как и остальные агрегатные функции) при подсчете не учитывает NULL-значения аргумента.

Пример 5.5.1

Найти минимальную и максимальную цену на персональные компьютеры:
SELECT MIN(price) AS Min_price,
       MAX(price) AS Max_price
FROM PC;
mssql
🚫
[[ error ]]
[[ column ]]
[[ value ]]

Результатом будет единственная строка, содержащая агрегатные значения:

Min_priceMax_price
350980

Пример 5.5.2

Найти имеющееся в наличии количество компьютеров, выпущенных производителем А
SELECT COUNT(*) AS Qty
FROM PC
WHERE model IN(SELECT model
               FROM Product
               WHERE maker = 'A'
              );
mssql
🚫
[[ error ]]
[[ column ]]
[[ value ]]

В результате получим

Qty
8

Пример 5.5.3

Если же нас интересует количество различных моделей, выпускаемых производителем А, то запрос можно сформулировать следующим образом (пользуясь тем фактом, что в таблице Product номер модели - столбец model - является первичным ключом и, следовательно, не допускает повторений):

SELECT COUNT(model) AS Qty_model
FROM Product
WHERE maker = 'A';
mssql
🚫
[[ error ]]
[[ column ]]
[[ value ]]
Qty_model
7

Пример 5.5.4

Найти количество имеющихся различных моделей ПК, выпускаемых производителем А.

Запрос похож на предыдущий, в котором требовалось определить общее число моделей, выпускаемых производителем А. Здесь же требуется найти число различных моделей в таблице РС (то есть имеющихся в продаже).

Для того чтобы при получении статистических показателей использовались только уникальные значения, при аргументе агрегатных функций можно применить параметр DISTINCT. Другой параметр - ALL - задействуется по умолчанию и предполагает подсчет всех возвращаемых (не NULL) значений в столбце. Оператор

SELECT COUNT(DISTINCT model) AS Qty
FROM PC
WHERE model IN (SELECT model
                FROM Product
                WHERE maker = 'A'
               );
mssql
🚫
[[ error ]]
[[ column ]]
[[ value ]]

даст следующий результат

Qty
2

Если же нам требуется получить количество моделей ПК, производимых каждым производителем, то потребуется использовать предложение GROUP BY, синтаксически следующего после предложения WHERE.

Рекомендуемые упражнения: 10, 11, 12, 13, 18, 24, 25, 26, 27, 40, 41, 43, 51, 53, 54, 58, 61, 62, 75, 77, 79, 80, 81, 85, 86, 88, 91, 92, 93, 94, 95, 96, 103, 109, 127, 129