|
Программирование >> Исключение дубликатов строк
Уточнение: Преобразование: Select customer state and the sum of quantity ordered times quoted price as SumOfOrders from the customers table joined with the orders table on customer ID, and then oined with the order details table on order number where customer state is in the list: WA , OR , CA , grouped by customer state, and having the sum of the orders greater than $ 1 million (Выбрать штат клиента и сумму заказанного количества, умноженную на объявленную цену, как SumOfOrders из таблицы Клиенты , соединенной с таблицей Заказы по идентификатору клиента, а затем соединенной с таблицей Детали заказа по номеру заказа, где штат клиента находится в списке: WA , ORVCA , сгруппированные по штату клиента и имеющ,ие сумму заказов больше 1 млн долларов) Select customer state and the sum of (quantity ordered times * quoted price) as SumOfOrders from the customers table joined with the orders table on customer ID, and then joined with the order details table on order number where customer state ts in the list ( WA , OR , CA ), grouped зу customer state, ttd having the sum of the orders greater than > $1 million 1000000 (Выбрать штат клиента, сумму (заказанное количество * объявленная цена) как SumOfOrders из Клиенты , соединенной с Заказы по идентификатору клиента, соединенной с Детали заказа по номеру заказа, где штат клиента в: WA , OR , CA , сгруппированные по штату клиента, имеюш,ие сумму заказов > 1 ООО ООО) SELECT Customers.CustState, SUM(Order Details.QtjantityOrdered * Order Details.QuotedPrice) AS SumOfOrders FROM (Customers INNER JOIN Orders ON Customers.CustomerlD = Orders. CustomerlD) INNER JOIN Order.Details ON Orders.OrderNumber = Order Details.OrderNumber WHERE Customers.CustState IN (WA, OR, CA) GROUP BY Customers.CustState HAVING SUM(Order Details.QuantityOrdered * Order.Details.QuotedPrice) > 1000000 Этот запрос сохранен в учебной базе данных как West Coast Big Order States. Обход лоаушки в HAVING COUNT Иногда требуется узнать, какие категории элементов имеют меньше, чем определенное количество элементов, например, какие эстрадные группы состоят из двух или менее участников, какие рецепты содержат два или менее молочных компонентов, какие предметы ведут три или менее профессоров, работаюших на полную ставку. Хитрость здесь состоит в том, что такоюе требуется узнать, какие категории имеют ноль элементов. Рассмотрим запрос, показываюш,ий ловушку, в которую можно попасть: Show те the subject categories that have three or fewer full professors teaching that subject . Ha рис. 14.4 представлены таблицы, необходимые для решения этой задачи. Faculty Staff ID Title Status Tenured Faculty Categories StafftD CategorylD CPK I CPK И4 CATEGORrES CategorylD PK CategoryDescription Рис. 14.4. Категории предметов и профессорско-преподавательский состав, читающий по этим категориям Преобразование: Уточнение: Select category description and the count of staff ID as ProfCount from the categories table joined with the faculty categories table on category ID, and then joined with the faculty table on staff ID where title is Professor, grouped by category description, and having the count of staff ID less then 3 (Выбрать описание категории и подсчитать идентификаторы персонала как ProfCount из таблицы Категории , соединенной с таблицей Категории преподавателей по идентификатору категории, а затем соединенной с таблицей Преподаватели по идентификатору персонала, где должность - профессор , сгруппированные по описанию категории и имеюшие количество идентификаторов персонала меньше 3) Select category description and the count of (staff ID) as ProfCount from the categories table joined with the faculty categories table on category ID, and then joined with the faculty table on staff ID where title is = Professor, grouped by category description, me having the count of (staff ID) less then < 3 (Выбрать описание категории, подсчитать (идентификатор персонала) как ProfCount из Категории , соединенной с Категории преподавателей по идентификатору категории, а затем соединенной с Преподаватели по идентификатору персонала. где должность профессор , сгруппированные по описанию категории, имеющие количество (идентификатор персонала) < 3) SELECT Categories.CategoryDescription, COUNT(Faculty.Categories.StaffID) AS ProfCount FROM (Categories INNER JOIN Faculty Categories ON Caregories.CategorylD = Faculty Categories.CategorylD) INNER JOIN Faculty ON Faculty.StaffID = Faculty.Categories.StaffID WHERE Faculty.Title = Professor GROUP BY Categories.CategoryDescription HAVING COUNT(Faculty Categories.StaffID) < 3 Subjccts Fcujcr 3 Profcssors UJRONG Выглядит неплохо, не так ли? Справа приведен набор результатов, возвращенный этим запросом. Заметили ли вы, что в наборе результатов не указаны категории предметов с нулевым числом профессоров? Причина этого кроется в том, что функция COUNT подсчитывает только строки, оставшиеся в таблице Faculty Categories после фильтрации по всем профессорам, имеющим докторскую степень. Все потенциально нулевые строки были отброшены в условии WHERE! Чтобы подтвердить наши подозрения о том, что в некоторых категориях нет профессоров, имеющих докторскую степень, построим запрос, который проверит наши теоретические предположения. Вспомните, что агрегатная функция COUNT возвращает ноль, если от нее запрашивается подсчет пустого множества, и можно получить пустое множество, если потребовать от запроса определить, сколько
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |