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