Читаоци попут вас помажу у подршци МУО. Када обавите куповину користећи везе на нашем сајту, можда ћемо зарадити провизију за партнере. Опширније.

Свестраност СКЛ-а као ДБМС језика за упите је порасла током година. Његова експанзивна корисност и свестраност чине га омиљеним за сва времена за сваког аналитичара података.

Постоји доста функција напредног нивоа осим уобичајених СКЛ-ових. Ове функције су обично познате као функције прозора. Ако имате посла са сложеним подацима и желите да извршите напредне прорачуне, можете их користити да бисте на најбољи начин искористили своје податке.

Важност функција прозора

У СКЛ-у је доступно неколико функција прозора, а свака ће вам помоћи да извршите низ прорачуна. Од креирања партиција до рангирања редова или додељивања бројева редова, ове функције прозора раде по мало од свега.

Функције прозора су корисне када примењујете агрегатне функције на одређени скуп података или колекцију редова. Ове функције превазилазе функције агрегације које пружа ГРОУП БИ. Међутим, главна разлика је у томе што, за разлику од функције груписања, ваши подаци нису комбиновани у један ред.

Не можете користити функције прозора унутар ГДЕ, ИЗ, и ГРУПА ОД изјаве.

Синтакса функције прозора

Када се позивате на било коју функцију прозора, морате да пратите подразумевану структуру синтаксе, тако да она исправно функционише. Ако неправилно структурирате команду, добићете грешку и ваш код неће бити покренут.

Ево подразумеване синтаксе:

СЕЛЕЦТ име колоне1,
{виндов_фунцтион}(назив колоне2)
ПРЕКО([ПАРТИТИОН БИ цолумннаме1] [ОРДЕР БИ цолумннаме3]) КАО нова_колона
ФРОМ табле_наме;

Где:

  • име колоне1 је назив прве колоне коју желите да изаберете.
  • {виндов_фунцтион} је име агрегатне функције као што је сума, авг, цоунт, ров_нумбер, ранк или денсе_ранк.
  • име колоне2 је назив колоне на коју примењујете функцију прозора.
  • цолумннаме3 је име треће колоне, које ће чинити основу за партицију.
  • нова_колона је ознака за нову колону коју можете применити помоћу КАО кључна реч.
  • табле_наме је назив изворне табеле.

Функције прозора се разликују од неких већина основних СКЛ команди. За разлику од агрегатних функција у СКЛ-у, ове функције прозора можете користити за обављање напредних функција.

Припрема скупа података

Можете користити ЦРЕАТЕ ТАБЛЕ изјава да креирајте нову табелу у СКЛ-у. Ево примера скупа података који ће овај водич користити за дефинисање неких функција прозора:

Датум поруџбине

Категорија

Боја

Продајна цена

Количина

08-11-2016

Телефони

Црн

907.152

6

12-06-2016

Биндерс

Зелен

18.504

3

11-10-2015

Апарати

Жута

114.9

5

11-10-2015

Табле

Браон

1706.184

9

09-06-2014

Телефони

Црвени

911.424

4

09-06-2014

Папир

бео

15.552

3

09-06-2014

Биндерс

Црн

407.976

3

09-06-2014

Апарати

Жута

68.81

5

09-06-2014

Биндерс

Зелен

2.544

3

09-06-2014

Складиште

Оранге

665.88

6

09-06-2014

Складиште

Оранге

55.5

2

15-04-2017

Телефони

Црн

213.48

3

05-12-2016

Биндерс

Зелен

22.72

4

22-11-2015

Апарати

Зелен

60.34

7

22-11-2015

Столице

Тамно браон

71.372

2

13-05-2014

Намештај

Оранге

190.92

5

Објашњена функција збира

Претпоставимо да желите да израчунате укупну продају за сваку вредност унутар колоне категорије. Ево како то можете да урадите:

СЕЛЕЦТкатегорија, боја,
сума (продајна_цена)
ПРЕКО (поређај по категорији) АС тотал_салес
ФРОМ сахил.сампле;

У горњем коду, СКЛ изјава извлачи категорију и боју из оригиналног скупа података. Функција сума сабира колону сале_прице. То ради по категорији, пошто клаузула ОВЕР специфицира редослед по колони категорије. Коначни резултат је следећи:

Како користити функцију прозора Авг().

Као и функција збира, можете израчунати просек по реду података помоћу авг функција. Уместо суме, добићете колону са просечном продајом.

СЕЛЕЦТкатегорија, боја,
прос. (продајна_цена)
ПРЕКО (редослед по категорији) АС авг_салес
ФРОМ сахил.сампле;

Научите да користите функцију прозора Цоунт().

Слично функцијама сума и авг, функција прозора за бројање у СКЛ-у је прилично јасна и ради на истој линији као и друге две функције. Када проследите функцију бројања, добијате укупан број сваке вредности у новој колони.

Ево како можете израчунати број:

СЕЛЕЦТкатегорија, боја,
број (категорија)
ПРЕКО (редослед по категорији) АС итем_цоунт
ФРОМ сахил.сампле;

Функција прозора Ров_Нумбер().

За разлику од неких других прозорских функција наведених горе, ров_нумбер() ради мало другачије. Функција ров_нумбер() сваком реду додељује број реда, у зависности од редоследа по клаузули. Број почетног реда је 1; број_реда додељује одговарајућу вредност сваком реду до краја.

Ево основне структуре функције ров_нумбер():

СЕЛЕЦТкатегорија, боја,
ред_број()
ПРЕКО (редослед по категорији) КАО број_ставке
ФРОМ сахил.сампле;

Али шта се дешава ако желите да доделите засебне бројеве редова свакој ставци категорије? Горња синтакса поставља стални серијски број, без обзира на ставке ускладиштене у категорији. На пример, категорија апарата треба да има своју ексклузивну нумерацију, праћену регистраторима и тако даље.

Можете користити подела функцију за обављање овог једноставног, али практичног задатка. Кључна реч партиције додељује одређене бројеве редова на основу сваке ставке категорије.

СЕЛЕЦТкатегорија, боја,
ред_број()
ПРЕКО (партиција по категорији редослед по категорији) АС број_ставке
ФРОМ сахил.сампле;

Функције Ранк() и Денсе_Ранк().

Тхе ранг() функција ради другачије од ред_број() функција. Морате да наведете име колоне унутар редоследа по функцији, да бисте га користили као основу за дефинисање вредности ранга. На пример, у следећем примеру кода можете да користите колону боје у оквиру редоследа по функцији. Упит ће затим користити тај редослед да додели вредност ранга сваком реду.

Можете користити доњу синтаксу кода да бисте проследили функцију рангирања у СКЛ-у:

СЕЛЕЦТкатегорија, боја,
ранг()
ПРЕКО (редослед по боји) АС итем_ранк
ФРОМ сахил.сампле;

Погледајте излаз да бисте разумели како ова функција функционише.

Редослед по функцији сортира категорију боја, док функција ранг свакој боји додељује ранг. Међутим, све исте вредности боја имају исти ранг, док различите боје имају одвојене рангове. Црна боја се појављује три пута унутар скупа података; уместо додељивања вредности ранга 1, 2 и 3, ставке црне боје добијају ранг 1.

Међутим, следећа смеђа боја добија ранг 4 уместо ранга 2. Функција ранга прескаче вредности и додељује следећу хронолошку вредност различитим уносима. Ако желите да доделите значајнију вредност ранга, можете да користите густ_ранг() функција.

Функција денсе_ранк не прескаче ниједну вредност ранга током редоследа по функцији. На пример, прве три ставке у боји (црна) ће имати ранг 1. Међутим, следећа боја (браон) неће имати ранг 4, већ ранг 2, што је следећи хронолошки број на листи нумерације. Функција денсе_ранк је практичнија функција прозора јер додељује значајну вредност листи ставки.

Ево како можете да користите функцију денсе_ранк у СКЛ-у:

СЕЛЕЦТкатегорија, боја,
густ_ранг()
ПРЕКО (редослед по боји) АС итем_ранк
ФРОМ сахил.сампле;

А ево примера како ће изгледати излаз ове функције:

СКЛ функције за спас

СКЛ-ове прозорске функције су идеалне за обављање напредних аналитичких операција. Међутим, можете користити много других СКЛ команди да бисте били сигурни да су ваше рачунарске вештине врхунске. Када комбинујете и израчунате више резултата у једном потезу, нема ништа боље од коришћења СКЛ-ових подупита.

Подупити су одличан алат за обављање напредних функција, побољшавајући квалитет ваших резултата. У зависности од потреба сата, можете да прилагодите своје упите и учините их ефикаснијим да одговарају вашим захтевима.