|
Программирование >> Исключение дубликатов строк
List the engagement numbers that have a contract price greater than or equal to the overall average contract price . ( Привести список номеров ангажементов, для которых цена контракта больше или равна обией средней цене контракта .) Один из методов, который можно применить для ответа на этот запрос, состоит в вычислении общей средней цены контракта вручную, а затем использовании этого значения в предикате сравнения. Преобразование: Select the engagement number from the engagements table where the contract price is greater than or equal to $24,887.00 (Выбрать номер ангажемента из таблицы Ангажементы , где цена контракта больше или равна 24887,00 долларов) Уточнение: Select the engagement number from the engagements table where the contract price is greater than or equal to >= $24,887.00 (Выбрать номер ангажемента из Ангажементы , где цена контракта > 24 887,00) SELECT EngagementNumber FROM Engagements WHERE ContractPrice >= 24,887.00 Другой способ решения этой задачи - использование агрегатной функции в подзапросе и предоставление системе базы данных возможности выполнить всю работу за вас. Преобразование: Select the engagement number from the engagements table where the contract price is greater than or equal to the overall average contract price in the engagements table (Выбрать номер ангажемента из таблицы Ангажементы , где цена контракта больше или равна общему среднему значению цены контракта в таблице Ангажементы ) Select the engagement number from the engagements table where the contract price is greater than or equal to the >= overall average (select avg contract price in the from engagements table) (Выбрать номер ангажемента из Ангажементы , Уточнение: где цена контракта из Ангажементы )) > (Выбрать avg цены контракта SQL SELECT EngagefnentNumber FROM Engagements WHERE ContractPrice >= (SELECT AVG(ContractPrice) FROM Engagements) Использование подзапросов в агрегатной функции является наилучшим образом действий. Если используется литеральное значение, следует быть уверенным, что средняя цена контракта всегда пересчитывается до выполнения оператора SELECT в случае изменения любых суш,ествуюш.их цен контрактов. Затем следует убедиться, что значение в предикат сравнения вводится правильно. Но, если используется подзапрос, то ни о чем из сказанного не следует беспокоиться. Функция AVG всегда оценивается при выполнении оператора SELECT и всегда возвраш,ает правильное значение независимо от того, изменились ли какие-либо цены контрактов (это справедливо для любой агрегатной функции, используемой в подзапросе). Используя в подзапросе условие WHERE, можно ограничить строки, оцени.вае-мые агрегатной функцией. Это позволяет сузить область статистического значения, возвраш,аемого агрегатной функцией. Рассмотрим пример применения этой методики. List the engagement number and contract price of all engagements that have a contract price larger than the total amount of all contract prices for the entire month of May in 1999 . ( Hpueecrhu список номеров ангажементов и цену контрактов всех ангажементов, у которых цена контракта больше общей суммы всех цен контрактов за месяц май 1999 г. .) Преобразование: Select engagement number and contract price from the engagements table where the contract price is greater than the sum of all contract prices of engagements dated between May 1, 1999 and May 31, 1999 (Выбрать номер ангажемента и цену контракта из таблицы Ангажементы , где цена контракта больше суммы всех цен контрактов для ангажементов на период с 1 мая 1999 по 31 мая 1999) Уточнение: Select engagement number, шё contract price from the engagements table where the contract price is greater than > the (select sum of all (contract prices) of from engagements where dated start date between May 1, 1999 Ч999-05-0Г and Ч999-05-ЗГ) May 31,1999 (Выбрать номер ангажемента, цену контракта из Ангажементы , где цена контракта > (Выбрать сумму (цена контрактов) из Ангажементы , где дата начала между Ч999-05-0Г и 1999-05-31) SQL SELECT EngagementNumber, ContractPrice FROM Engagements WHERE ContractPrice > (SELECT SUM(ContractPrice) FROM Engagements WHERE StartDate BETWEEN 1999-05-01 AND 4999-05-31) Необходимость использовать агрегатные функции в фильтрах возникает редко, но они определенно подходят, когда требуется ответить на случайные, вне рамок , запросы. Примеры опвратороА Рассмотрим некоторые примеры применения агрегатных функций, используя таблицы из каждого примера баз данных. Внимание! Все имена столбцов и таблиц, используемых в этих примерах, взяты из структур учебных баз данных, представленных в приложении В. Для упрощения процесса во всех последующих примерах этапы преобразования и уточнения объединены. Бозо донных зокозов но зокупки How many customers do we have in the state of California? ( Сколько у нас клиентов в штате Калифорния? ) Преобразование/ Select the count(*) of all customers from the customers table where the state = *CA Уточнение: (Выбрать count(*) из Клиенты , где штат = *СА) SELECT COUNT(*) AS NumberOfCACustomers FROM Customers WHERE CustState = CA Number.Of.Coiifornio.Customers (1 строка) List the product names and numbers that have a quoted price greater than or equal to the overall average retail price in the products table . ( Привести список наименований и номеров товаров, объявленная цена которых больше или равна общей средней розничной цене в таблице Товары .)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |