Программирование >>  Исключение дубликатов строк 

1 ... 128 129 130 [ 131 ] 132 133 134 ... 152


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 по столбцу с ценой контракта и получить совокупную строку по каждой эстрадной группе. Результат будет похож на представленный в следующей таблице.

Albert Bucliiuian

$3,030.00

SlUKOO

$770.00

$336.67

Carol Pcactick Trio

$ 11 молю

$140.00

.....................,................,.......Mini

$i,9i0.00

$1,007.27

Caroline Coic Cuartct

............. 1

$15,070.00

$290.00

$2,450.00

$1,370.{Ю

Coldwater <>jittk Coinpany

$19/100.00 1 $350.00

$3,800.(K)

$1,910.00

Country* Feeling

$36,230.00 $275.00

<

$14,10500

$2,26138

Jar/ Persuasion

$7,780.00

$500.00

$2,300.00

$972. SO

Julia Schnebly

$4.665.00 ! $275.00

-r ... , ....

$875.(K)

$518.33

JV & the Deep Six

$18,820.00 j S950.00

$3,650.(K)

$1,710.91 [

остальные строки

Интересно выглядит, не так ли? Спорим, вам хотелось бы узнать, как это было сделано! Все детали подробно излагаются в следующих разделах.

Условие GftOUP BV

Используя агрегатные функции, можно найти интересующую информацию любого типа. Во всех приведенных нами примерах агрегатные функции применялись ко всем строкам, возвращенным условиями FROM и WHERE. Используя условие WHERE, можно отфильтровать набор результатов по одной группе, но в действительности не был показан способ просмотра результатов из нескольких групп в одном запросе. Чтобы выполнить это суммирование по группам в одном запросе, требуется добавить еще одно основное условие к нашему словарю языка SQL - GROUP BY.

Синтаксис

Внимательно рассмотрим условие GROUP BY. На рис. 13.1 представлена основная диаграмма для оператора SELECT с добавленным условием GROUP BY.




<M4it







f- WHERE


: .;

.. 1 . :.

. , ;....., ,

,r::..>:

Ч l


: ;;:-;---;-;ч-;;;.-,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.



1 ... 128 129 130 [ 131 ] 132 133 134 ... 152

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.003
При копировании материалов приветствуются ссылки.
Яндекс.Метрика