Увод у клаузулу СКЛ ХАВИНГ

Основно питање које вам пада на памет је шта је то ХАВИНГ клаузула? Па, клаузула ХАВИНГ користи се за филтрирање резултата из СКЛ упита са агрегатним функцијама. Да би се разумио на обичном енглеском, то је наредба СКЛ рашчлањивачу "Хеј СКЛ, из наше табеле података о клијентима, донесите ми имена земаља које имају више од милион клијената".

Чекај, то је оно Где клаузула ради, зар не? Да, то је врло слично начину на који делује клаузула ВХЕРЕ, али са малом разликом. Клаузула ВХЕРЕ не ради са агрегатним функцијама.

Сада, само да сакупимо мало о агрегатним функцијама, ово су функције које узимају више редова као улаз и дају значајније обрађени излаз. Неколико примера су гроф (), зброј (), мин (), макс. (), Просек () итд.

Зашто имати, а не ГДЈЕ?

Видимо да клаузуле ХАВИНГ и ВХЕРЕ обављају врло сличан задатак да филтрирају резултате. Онда, која је била потреба за клаузулом ХАВИНГ? Зашто се клаузула ГДЈЕ не може користити са скупним функцијама?

Да бисмо одговорили на то, требало би да разумемо како СКЛ енгине третира две клаузуле. Клаузула ФРОМ у свакој СКЛ наредби упућује мотор одакле треба да чита редове. Подаци се чувају на диску и преузимају се у меморију на обраду. Док се редови читају један по један са диска у меморију, проверавају се ВХЕРЕ клаузула. Редови који не успеју клаузу ГДЕ се не учитавају у меморију. Дакле, клаузула ВХЕРЕ се процењује за сваки ред док их обрађује СКЛ енгине.

Супротно томе, клаузула ХАВИНГ долази у слику тек након што су редови учитани у меморију. Једном учитани у меморију, функције агрегата извршавају свој задатак у редовима ИМАЈУЋИ жељено стање.

Сад, ако бисмо ставили ВХЕРЕ клаузулу са агрегатном функцијом попут авг (), то би збуњивало СКЛ енгине око тога да ли треба укључити ред за израчунавање просека или не. У суштини, наредили бисмо мотору да не чита ред јер није прошао критеријуме авг () у ВХЕРЕ клаузули. Али хеј, да бисте утврдили да ли је прошао критеријум израчунавања авг () прошао или пропустио, ред треба прочитати у меморији. Стање ћорсокака.

Синтакса

SELECT
FROM


ГДЈЕ - факултативно
ГРОУП БИ - групира редове за примену агрегатне функције
ХАВИНГ - функција агрегата у стању
НАРУЧИТЕ ПО; - дефинисати редослед сортирања, изборно

Напомена - клаузула ГРОУП БИ потребна је уз ХАВИНГ клаузулу. То је због тога што је за клаузулу потребна група података за примену збирне функције и филтрирање резултата.

Како функционише клаузула ХАВИНГ?

Разјаснимо функционирање клаузуле ХАВИНГ у СКЛ-у.

Клаузу ХАВИНГ увек прати клаузула ГРОУП БИ. Клаузула ГРОУП БИ обједињује податке који одговарају одређеном критеријуму. Има три фазе - раздвајање, наношење и комбиновање. Подељена фаза дијели редове на групе. Фаза примјене примјењује неке збирне функције на групе података. Комбинована фаза даје јединствен резултат комбинујући групе са резултатом збирне функције.

Сада када су групе формиране, на слику улази ХАВИНГ клаузула. Клаузула ХАВИНГ затим филтрира групе које не задовољавају задани услов.

SELECT Col_A, avg(Col_B) as Col_B
FROM MyTable
GROUP BY Col_A
HAVING avg(Col_B)>30

Тако у горњем примеру видимо да се табела прво дели на три групе на основу ступца Цол_А. Затим се на групе примењује функција здруживања за израчунавање просечних вредности Цол_Б. То резултира у једном реду за сваку групу. Редови се затим комбинују и филтрирају на основу стања у клаузули ХАВИНГ.

Пример

Погледајмо сада пример из стварног света. Узмите у обзир да имамо следећу табелу купаца и поруџбине које су послали код нас.

Идентификација купцаИме клијентаГрадЗемља
1Ања ДамианБерлинНемачка
2Денни ЦоцкеттМекицо ДФМексико
3Елеанор ЦалнанМекицо ДФМексико
4Албертха АлбуриЛондонУК
5Латисха НембхардЛулеаШведска
6Мадалене БингМаннхеимНемачка
7Ребецка БееглеСтразбурФранцуска
8Роси ТиппиеМадридШпанија
9Аудие КханМарсеиллеФранцуска
10Хилдегард БурровесТсавассенКанада
11Цорделл ДутремблеЛондонУК
12Нора РеинаБуенос АјресАргентина
13Урсула ЛафорестМекицо ДФМексико
14Цлаудие НеелБернШвајцарска
15Портиа ИееСао ПаулоБразил
16Ангила СегарраЛондонУК
17Лисе ВеклерАацхенНемачка
18Нед МендивилНантесФранцуска
19Сара ВидаурриЛондонУК
20Таина НавинГразАустрија
21Пура РаиСао ПаулоБразил
22Ерика БиардМадридШпанија
23Јиммие ЛукеЛиллеФранцуска
24Схаила БиингтонБрацкеШведска
25Цхристиана БоденМунцхенНемачка
26Ирина НиттаНантесФранцуска
27Брианна АллсТориноИталија
28Норах ПицкенЛисбоаПортугал
29Мориах СтвартБарцелонаШпанија
30Иделла ХарриоттСевиллаШпанија
ИД поруџбинеИдентификација купцаДатум поруџбине
102541411-07-1996
102582017-07-1996
102591318-07-1996
102632023-07-1996
102642424-07-1996
10265725-07-1996
102672529-07-1996
10278512-08-1996
10280514-08-1996
102891126-08-1996
102901527-08-1996
10297704-09-1996
103033011-09-1996
10308218-09-1996
103111820-09-1996
10326810-10-1996
103272411-10-1996
103282814-10-1996
10331916-10-1996
103372524-10-1996
10340929-10-1996
103422530-10-1996
103472106-11-1996
103512011-11-1996
103522812-11-1996
10355415-11-1996
10360722-11-1996
10362925-11-1996
103631726-11-1996
103641926-11-1996
10365327-11-1996
103662928-11-1996
103682029-11-1996
103701403-12-1996
103782410-12-1996
103822013-12-1996
10383416-12-1996
10384516-12-1996
103862118-12-1996
103891020-12-1996
103902023-12-1996
103911723-12-1996
103962527-12-1996
104001901-01-1997
104022002-01-1997
104032003-01-1997
104082308-01-1997
104101010-01-1997
104111010-01-1997
104142114-01-1997
104222722-01-1997
104262927-01-1997
104302030-01-1997
104311030-01-1997
104342403-02-1997
104351604-02-1997
10436705-02-1997
104422011-02-1997

Сада желимо знати да су купци из којих земаља послали укупно 5 или више поруџбина код нас. То може бити један купац који издаје више од 5 наруџби или 5 купаца који постављају по 1 наруџбину.

Да бисмо то постигли, морали бисмо

1. корак : Придружите се две табеле

2. корак: Групирајте купце на основу њихових земаља

Корак 3: Пребројите број налога за сваку групу

4. корак: Филтрирајте резултате за 5 или више поруџбина

Формирајмо команду:

SELECT C.Country, COUNT(O.OrderId) as NumberOfOrders -- Step 1, 3
FROM Customers C -- Step 1
INNER JOIN Orders O on C.CustomerID = O.CustomerID -- Step 1
GROUP BY C.Country -- Step 2
HAVING COUNT(O.OrderId) >= 5 -- Step 4
ORDER BY COUNT(O.OrderId) DESC

Ево резултата:

ЗемљаНумберОфОрдерс
Аустрија10
Француска9
Шведска7
Немачка6
УК6

Закључак - СКЛ ХАВИНГ клаузула

Стога смо видели која је сврха клаузуле ХАВИНГ и како функционише. Важно је да схватите основни рад, иначе се можете збунити зашто клаузула ХАВИНГ не даје жељене резултате. Наставите да се играте са разним столовима и придружите се и комбинације заједно са клаузулом ХАВИНГ.

Препоручени чланци

Ово је водич за СКЛ ХАВИНГ клаузулу. Овдје разговарамо о раду клаузуле ХАВИНГ у СКЛ-у и примјеру са сљедећом таблицом купаца. Можете и да прођете кроз друге наше предложене чланке -

  1. СКЛ Инсерт Куери
  2. Страни кључ у СКЛ-у
  3. Различита кључна реч у СКЛ-у
  4. СКЛ Виевс
  5. Топ 6 примјера упита за унутрашњу придруживање Орацлеу

Категорија: