Увод у клаузулу СКЛ ХАВИНГ
Основно питање које вам пада на памет је шта је то ХАВИНГ клаузула? Па, клаузула ХАВИНГ користи се за филтрирање резултата из СКЛ упита са агрегатним функцијама. Да би се разумио на обичном енглеском, то је наредба СКЛ рашчлањивачу "Хеј СКЛ, из наше табеле података о клијентима, донесите ми имена земаља које имају више од милион клијената".
Чекај, то је оно Где клаузула ради, зар не? Да, то је врло слично начину на који делује клаузула ВХЕРЕ, али са малом разликом. Клаузула ВХЕРЕ не ради са агрегатним функцијама.
Сада, само да сакупимо мало о агрегатним функцијама, ово су функције које узимају више редова као улаз и дају значајније обрађени излаз. Неколико примера су гроф (), зброј (), мин (), макс. (), Просек () итд.
Зашто имати, а не ГДЈЕ?
Видимо да клаузуле ХАВИНГ и ВХЕРЕ обављају врло сличан задатак да филтрирају резултате. Онда, која је била потреба за клаузулом ХАВИНГ? Зашто се клаузула ГДЈЕ не може користити са скупним функцијама?
Да бисмо одговорили на то, требало би да разумемо како СКЛ енгине третира две клаузуле. Клаузула ФРОМ у свакој СКЛ наредби упућује мотор одакле треба да чита редове. Подаци се чувају на диску и преузимају се у меморију на обраду. Док се редови читају један по један са диска у меморију, проверавају се ВХЕРЕ клаузула. Редови који не успеју клаузу ГДЕ се не учитавају у меморију. Дакле, клаузула ВХЕРЕ се процењује за сваки ред док их обрађује СКЛ енгине.
Супротно томе, клаузула ХАВИНГ долази у слику тек након што су редови учитани у меморију. Једном учитани у меморију, функције агрегата извршавају свој задатак у редовима ИМАЈУЋИ жељено стање.
Сад, ако бисмо ставили ВХЕРЕ клаузулу са агрегатном функцијом попут авг (), то би збуњивало СКЛ енгине око тога да ли треба укључити ред за израчунавање просека или не. У суштини, наредили бисмо мотору да не чита ред јер није прошао критеријуме авг () у ВХЕРЕ клаузули. Али хеј, да бисте утврдили да ли је прошао критеријум израчунавања авг () прошао или пропустио, ред треба прочитати у меморији. Стање ћорсокака.
Синтакса
SELECT
FROM
Идентификација купца | Име клијента | Град | Земља |
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 | Иделла Харриотт | Севилла | Шпанија |
ИД поруџбине | Идентификација купца | Датум поруџбине |
10254 | 14 | 11-07-1996 |
10258 | 20 | 17-07-1996 |
10259 | 13 | 18-07-1996 |
10263 | 20 | 23-07-1996 |
10264 | 24 | 24-07-1996 |
10265 | 7 | 25-07-1996 |
10267 | 25 | 29-07-1996 |
10278 | 5 | 12-08-1996 |
10280 | 5 | 14-08-1996 |
10289 | 11 | 26-08-1996 |
10290 | 15 | 27-08-1996 |
10297 | 7 | 04-09-1996 |
10303 | 30 | 11-09-1996 |
10308 | 2 | 18-09-1996 |
10311 | 18 | 20-09-1996 |
10326 | 8 | 10-10-1996 |
10327 | 24 | 11-10-1996 |
10328 | 28 | 14-10-1996 |
10331 | 9 | 16-10-1996 |
10337 | 25 | 24-10-1996 |
10340 | 9 | 29-10-1996 |
10342 | 25 | 30-10-1996 |
10347 | 21 | 06-11-1996 |
10351 | 20 | 11-11-1996 |
10352 | 28 | 12-11-1996 |
10355 | 4 | 15-11-1996 |
10360 | 7 | 22-11-1996 |
10362 | 9 | 25-11-1996 |
10363 | 17 | 26-11-1996 |
10364 | 19 | 26-11-1996 |
10365 | 3 | 27-11-1996 |
10366 | 29 | 28-11-1996 |
10368 | 20 | 29-11-1996 |
10370 | 14 | 03-12-1996 |
10378 | 24 | 10-12-1996 |
10382 | 20 | 13-12-1996 |
10383 | 4 | 16-12-1996 |
10384 | 5 | 16-12-1996 |
10386 | 21 | 18-12-1996 |
10389 | 10 | 20-12-1996 |
10390 | 20 | 23-12-1996 |
10391 | 17 | 23-12-1996 |
10396 | 25 | 27-12-1996 |
10400 | 19 | 01-01-1997 |
10402 | 20 | 02-01-1997 |
10403 | 20 | 03-01-1997 |
10408 | 23 | 08-01-1997 |
10410 | 10 | 10-01-1997 |
10411 | 10 | 10-01-1997 |
10414 | 21 | 14-01-1997 |
10422 | 27 | 22-01-1997 |
10426 | 29 | 27-01-1997 |
10430 | 20 | 30-01-1997 |
10431 | 10 | 30-01-1997 |
10434 | 24 | 03-02-1997 |
10435 | 16 | 04-02-1997 |
10436 | 7 | 05-02-1997 |
10442 | 20 | 11-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 |
Закључак - СКЛ ХАВИНГ клаузула
Стога смо видели која је сврха клаузуле ХАВИНГ и како функционише. Важно је да схватите основни рад, иначе се можете збунити зашто клаузула ХАВИНГ не даје жељене резултате. Наставите да се играте са разним столовима и придружите се и комбинације заједно са клаузулом ХАВИНГ.
Препоручени чланци
Ово је водич за СКЛ ХАВИНГ клаузулу. Овдје разговарамо о раду клаузуле ХАВИНГ у СКЛ-у и примјеру са сљедећом таблицом купаца. Можете и да прођете кроз друге наше предложене чланке -
- СКЛ Инсерт Куери
- Страни кључ у СКЛ-у
- Различита кључна реч у СКЛ-у
- СКЛ Виевс
- Топ 6 примјера упита за унутрашњу придруживање Орацлеу