|
Программирование >> Исключение дубликатов строк
4i< *i< lllM**w m И1* и♦ >4 HiMiiiiiiiiliiiiiHiiiiwii Albert Buchanan 200.1 :nanan $185,00 ilW**;.ж<♦;> н**wv>w.i♦wwi>w*; Подобным образом в базе данных Entertainment Agency (Агентства эстрадных мероприятий) легко найти количество контрактов, полную цену контракта, наименьшую или наибольшую цену контракта для всех контрактов. Можно даже отфильтровать строки таким образом, чтобы видеть эти вычисления для отдельного эстрадного артиста, конкретного клиента или для определенного диапазона дат. Но если нужно увидеть только строку обш,их сумм ддя каждого клиента или эстрадного артиста, следует сгруппировать строки. Улавливаете идею? Когда от системы базы данных запрашивается группирование строк по значениям столбца или выражений, она формирует подмножества строк, основываясь на сов-падаюш,их значениях. Можно затем запросить базу данных подсчитать об-ш,ие (агрегатные) значения для каждой группы. Рассмотрим это на простом примере для базы данных Entertainment Agency. Сначала нужно записать запрос, который извлекает интересуюш,ие нас столбцы - имена эстрадных артистов и цену контракта: SQL SELECT Entertainers.EntStageName, Engagements.ContractPrice FROM Entertainers INNER JOIN Engagements ON Entertainers.EnrertainerlD = Engagements.EntertainerlD ORDER BY EntStageName Albert Buchanan St 10. Albert Buchanan AIbert Buclianan Mbert Buchanan Carol Peacock Trio $230.00 >5. $470.00 С iirol Peacock i rio $L670J)0 >аш1 Peacock l>io SL670,( (>аг(>1 Peacock IVio $320.00 Peacock IVio $L400.( I СлгЫ Peacock lYio $410.00 Carol Peacock 1 rio $140.00 (лш>[ Peacock Trio $410. Carol PeacockIrio $1,940.00 hMi!iiiii>.;<rti;*iiiii :.M I iiai Miiiiiiii*jfc: rt.-.-iM.M*.--4.tm* .:.- ilw iiHMi>l 1 Carol Peacock IVio Carol Peacock 1rio C>arolioe Coie Ciluartei Результат будет похож на приведенную слева таблицу. (В учебной БД этот запрос сохранен как Entertainers And ContractPrices.) Можно подсчитать количество всех строк или найти наименьшее значение, наибольшее значение, сумму или среднее значение для столбца ContractPrice, если исключить из рассмотрения столбец с псевдонимами эстрадных артистов. Можно сохранить этот столбец. если запросить базу данных сгруппировать по нему строки. При получении запроса на объединение в группы по псевдонимам база данных сформирует первую группу, содержащую первые девять строк ( Albert Buchanan ), вторую группу, содержащую следующие одиннадцать строк ( Carol Peacock Trio ), и т. д. по всей таблице. Теперь можно запросить COUNT (Подсчет) по строкам или SUM, MIN, MAX или AVG по столбцу с ценой контракта и получить совокупную строку по каждой эстрадной группе. Результат будет похож на представленный в следующей таблице.
Интересно выглядит, не так ли? Спорим, вам хотелось бы узнать, как это было сделано! Все детали подробно излагаются в следующих разделах. Условие GftOUP BV Используя агрегатные функции, можно найти интересующую информацию любого типа. Во всех приведенных нами примерах агрегатные функции применялись ко всем строкам, возвращенным условиями FROM и WHERE. Используя условие WHERE, можно отфильтровать набор результатов по одной группе, но в действительности не был показан способ просмотра результатов из нескольких групп в одном запросе. Чтобы выполнить это суммирование по группам в одном запросе, требуется добавить еще одно основное условие к нашему словарю языка SQL - GROUP BY. Синтаксис Внимательно рассмотрим условие GROUP BY. На рис. 13.1 представлена основная диаграмма для оператора SELECT с добавленным условием GROUP BY. <M4it f- WHERE
: ;;:-;---;-;ч-;;;.-,1Г),-1:-:;-Г:;-;;:-[.11[Г Рис. 13.1. Оператор SELECT с условием GROUP BY Таблицы, которые являются источником данмых, определяются в условии FROM. Оно может быть совсем простым, включая только имя одной таблицы, или достаточно сложным, состоящим из JOIN нескольких таблиц. Можно даже вложить весь табличный подзапрос (оператор SELECT) как ссылку на таблицу. Затем при необходимости можно указать условие WHERE, чтобы включить или исключить определенные строки, получаемые из условия FROM (см. главу 6). Посредством добавления условия GROUP BY определяются столбцы в логической таблице, сформированной условиями FROM и WHERE, которые СУБД должна использовать как определение для групп срок. Строки, имеющие одинаковое значение в столбцах, указанных в списке, будут собраны вместе в некоторую группу; столбцы, которые указаны в списке условия GROUP BY, могут использоваться в типизированном выражении условия SELECT. Для выполнения вычисления для каждой из групп могут также использоваться любые агрегатные функции. Попробуем применить условие GROUP BY, чтобы увидеть, какие вычисления можно выполнять с информацией о ценах контрактов для групп эстрадных артистов. На рис. 13.2 представлены таблицы, необходимые для реше- entertainebs EntertainerlD EntStageName EnlStreetAddress EntCity EntState EntZipCode EntPhoneNumber EntFaxNumber EntWebPage EntEnnailAddress DateEntered PK Kb вЧЧ V V* aVa* Engagements EngagementNumber StartDate EndDate StartTime StopTime ContractPrice CustomerlD AgentID EntertainerlD ния этой задачи. FK FK FK Рис. 13.2. Связь между таблицами Entertainers и Engagements Внимание! В этой главе используется метод Запрос/Преобразование/ Уточнение/SQL , введенный в главе 4.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.003
При копировании материалов приветствуются ссылки. |