|
Программирование >> Исключение дубликатов строк
SELECT, который подсчитывает все строки в таблице Employees для сотрудников, проживающих в штате Вашингтон: SQL SELECT COUNT(*) FROM Employees WHERE EmpState = WA Условие WHERE можно использовать, чтобы отфильтровать строки или значения, обработанные агрегатной функцией. Когда агрегатная функция используется в операторе SELECT, можно увидеть или не увидеть имя столбца в наборе результата для возвращаемого значения функции. Некоторые системы базы данных обеспечивают имя столбца по умолчанию, а другие нет. Но можно воспользоваться опцией AS синтаксиса функции, чтобы обеспечить значащее имя столбца для набора результата. Вот как можно применить эту опцию для предыдущего примера: SQL SELECT COUNT(*) AS TotalWashingtonEmployees FROM Employees WHERE EmpState = WA Теперь набор результатов состоит из столбца TotalWashingtonEmployees, который содержит возвращаемое значение функции COUNT(*). Как показывает синтаксическая диаграмма на рис. 12.1, этот метод можно применить к любой агрегатной функции. Функция COUNT (Типизированное выражение) используется для подсчета общего количества ne-Null значений, возвращаемых типизированным выражением. (Это выражение более широко известно как COUNT, и это имя мы будем использовать в остальной части книги.) Она подсчитывает все значения, возвращенные типизированным выражением, независимо от того, является ли оно уникальным или повторяющимся, и автоматически исключает все значения Null из окончательного подсчета. Для ответа на запросы такого типа можно использовать COUNT. How many customers were able to Indicate which county they live in? ( Сколько клиентов смогли указать, в каком округе они проживают? ) Здесь необходимо определить, сколько реальных значений существует в столбце указания округа. Поскольку COUNT(*) включает также значения Null, она не обеспечит правильный ответ. Вместо нее используйте функцию COUNT и преобразуйте запрос следующим образом: Преобразование: Select the count of non-null county values as NumberOfKnownCounties from the customers table (Выбрать количество не-Null-значений для округа как NumbeЮfKnownCounties из таблицы Клиенты ) Уточнение: Select the count of попПиИ (county) values as NumberOfKnownCounties from the customers table (Выбрать количество (округ) как NumberOfKnownCounties из Клиенты ) SELECT COUNT(CustCounty) AS NumberOfKnownCounties FROM Customers Обратите внимание, что Перевод и Уточнение явно запрашивают значения не-ЫиИ. Хотя уже известно, что эта функция обрабатывает только не-Null значения, следует добавить этот запрос к обоим операторам, чтобы быть уверенным, что используется правильная функция COUNT. Оператор SELECT, определенный здесь, будет генерировать набор результатов, который содержит числовое значение, пред-ставляюшее обш,ее количество наименований округов, обнаруженных в столбце CustCounty. Вспомните, что функция COUNT интерпретирует повторяюш,иеся наименования округа, как если бы они были уникальными, и включает каждый из них в окончательный подсчет. Однако можно воспользоваться опцией DISTINCT функции для исключения повторяюш,ихся значений из итоговой суммы. В следуюш,ем примере показано, как можно ее применить: How many unique county names are there in the customers table? ( Сколько уникальных названий округов имеется в таблице Клиенты? ) Преобразование: Select the count of unique county names as NumberOfUniqueCounties from the customers table (Выбрать количество уникальных названий округов. Уточнение: как NumberOfUniqueCounties из таблицы Клиенты ) Select the count of unique (distinct county) names as NumberOfUniqueCounties from the customers table (Выбрать подсчет (уникальных округов) как NumberOfUniqueCounties из Клиенты ) SELECT COUNT (DISTINCT CustCounty) AS NumberOfUniqueCouflties FROM Customers Когда используется опция DISTINCT, база данных извлекает все He-Null-значе-ния из столбца для округа, исключает повторы, а затем подсчитывает оставшиеся значения. База данных тш,ательно разбирается в большинстве этих же процессов, когда DISTINCT используется с функциями SUM, AVG, MIN или МАХ. В следуюш,ем примере исполь:уется немного измененная версия предыдуш,его запроса, чтобы показать, что к функции COUNT можно применять фильтр: How many unique county names are there in the customers table for the state of Oregon? ( Сколько уникальных названий округов имеется в таблице Клиенты для штата Орегон? ) Преобразование: Select the count of unique county names as NumberOfUniqueOregonCounties from the customers table where the state is *0R (Выбрать количество уникальных названий округов как NumberOfUniqueOregonCounties из таблицы Клиенты , Уточнение: где штатом является OR) Select the count of unique (distinct county) as NumberOfUniqueOregonCounties names from the customers table where the state = (Выбрать подсчет (округ по одному) как NumberOfUniqueOregonCounties из Клиенты , где штат = OR) SELECT COUNT (DISTINCT CustCounty) AS NumberOfUniqueOregonCounties FROM Customers WHERE CustState = OR Использование DISTINCT с COUNT(*) не допускается. Это - разумное ограничение, поскольку COUNT(*) подсчитывает все строки в таблице независимо от того, являются ли они избыточными или содержат значения Null. Подсчет общей суммы и SUM С помощью функции SUM можно вычислить общую сумму числовых типизированных выражений. Она обрабатывает все He-Null-значения типизированного выражения и возвращает окончательную итоговую сумму для набора результатов. Если типизированное выражение содержит во всех строках значение Null или условия FROM и WHERE вместе возвращают пустой набор результатов, то SUM возвращает Null. Вот пример запроса, на который можно ответить, используя SUM: What is the total amount we pay in salaries to our employees in California? ( Какая общая сумма выплачивается в виде зарплаты нашим сотрудникам в Калифорнии? ) Преобразование: Select the sum of salary as TotalSalaryAmount from the employees table where the state is CA (Выбрать сумму заработной платы как TotalSalaryAmount из таблицы Сотрудники , где штатом является СА)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |