КАК ИСПОЛЬЗОВАТЬ АГРЕГАТНЫЕ ФУНКЦИИ ?
Агрегатные функции используются подобно именам полей в предложении
SELECT запроса, но с одним исключением, они берут имена поля как аргументы. Только числовые поля могут
использоваться с SUM и AVG. С COUNT, MAX, и MIN, могут использоваться и числовые или символьные поля. Когда
они используются с символьными полями, MAX и MIN будут транслировать их в эквивалент ASCII, который должен
сообщать, что MIN будет означать первое, а MAX последнее значение в алфавитном порядке
. Чтобы найти SUM всех наших покупок в таблицы Порядков,
мы можем ввести следующий запрос, с его выводом в Рисунке 6.1:
SELECT SUM ((amt)) FROM Orders;
Рисунок 6.1: Выбор суммы Это конечно, отличается от выбора поля при котором возвращается одиночное значение,
независимо от того сколько строк находится в таблице. Из-за этого, агрегатные функции и поля не могут выбираться
одновременно, пока предложение GROUP BY (описанное далее) не будет использовано. Нахождение усредненой суммы -
это похожая операция ( вывод следующего запроса показывается в Рисунке 6.2 ):
SELECT AVG (amt) FROM Orders;
Рисунок 6.2: Выбор среднего
СПЕЦИАЛЬНЫЕ АТРИБУТЫ COUNT Функция COUNT несколько отличается от всех. Она считает число значений в данном
столбце, или число строк в таблице. Когда она считает значения столбца, она используется с DISTINCT чтобы
производить счет чисел различных значений в данном поле. Мы могли бы использовать ее, например, чтобы сосчитать
номера продавцов в настоящее время описаных в таблице Порядков ( вывод показывается в Рисунке 6.3 ):
SELECT COUNT ( DISTINCT snum ) FROM Orders;
ИСПОЛЬЗОВАНИЕ DISTINCT
Обратите внимание в вышеупомянутом примере, что DISTINCT, сопровождаемый именем поля с которым он применяется,
помещен в круглые скобки, но не сразу после SELECT, как раньше. Этого использования DISTINCT с COUNT применяемого
к индивидуальным столбцам, требует стандарт ANSI, но большое количество программ не предъявляют к ним такого
требования.
Рисунок 6.3: Подсчет значений поля
Вы можете выбирать многочисленые счета( COUNT ) из полей с помощью DISTINCT в одиночном запросе который,
как мы видели в Главе 3, не выполнялся когда вы выбирали строки с помощью DISTINCT. DISTINCT может использоваться
таким образом, с любой функцией агрегата, но наиболее часто он используется с COUNT. С MAX и MIN, это просто
не будет иметь никакого эффекта, а SUM и AVG, вы обычно применяете для включения повторяемых значений, так
как они законно эффективнее общих и средних значений всех столбцов.
ИСПОЛЬЗОВАНИЕ COUNT СО СТРОКАМИ, А НЕ ЗНАЧЕНИЯМИ
Чтобы подсчитать общее число строк в таблице, используйте функцию COUNT со звездочкой вместо имени поля,
как например в следующем примере, вывод из которого показан на Рисунке 6.4:
SELECT COUNT (*) FROM Customers;
COUNT со звездочкой включает и NULL и дубликаты, по этой причине DISTINCT
не может быть использован. DISTINCT может производить более высокие номера чем COUNT особого поля, который
удаляет все
SELECT COUNT (*) | | FROM Customers;
Рисунок 6. 4: Подсчет строк вместо значений строки, имеющие избыточные или NULL данные в этом поле.
DISTINCT не применим c COUNT (*), потому, что он не имеет никакого действия в хорошо разработаной и
поддерживаемой базе данных. В такой базе данных, не должно быть ни таких строк, которые бы являлись
полностью пустыми, ни дубликатов ( первые не содержат никаких данных, а последние полностью избыточны ).
Если, с другой стороны, все таки имеются полностью пустые или избыточные строки, вы вероятно не захотите
чтобы COUNT скрыл от вас эту информацию.