Klauzula SQL OVER () – kiedy i dlaczego jest przydatna?

W prostych słowach: klauzula Over może być używana do wybierania niezagregowanych wartości razem z zagregowanymi.

Partition BY, ORDER BY inside i ROWS lub RANGE są częścią klauzuli OVER () by.

Partition by służy do dzielenia danych, a następnie wykonywania tych funkcji okna, zagregowanych, a jeśli nie podziel się na partycje, a cały zestaw wyników będzie traktowany jako pojedyncza partycja.

Zobaczmy podstawową składnię klauzuli OVER

PARTITION BY: Służy do partycjonowania danych i wykonywania operacji na grupach z tymi samymi danymi.

ORDER BY: Służy do określenia logicznej kolejności danych w partycjach. Jeśli nie określimy partycji, cały zestaw wyników jest traktowany jako pojedyncza partycja

: Można to wykorzystać do określenia, które wiersze mają być brane pod uwagę w partycji podczas wykonywania operacji.

Weźmy przykład:

Oto mój zbiór danych:

Pozwólcie, że wykonam różne scenariusze i zobaczę, jak wpływa to na dane, a przejdę od trudnej składni do prostej jeden

Po prostu obserwuj część sum_sal. Tutaj używam kolejności według wynagrodzenia i używam „ZAKRESU MIĘDZY NIEOGRANICZONYM WSTĘPNYM I BIEŻĄCYM WIERSZEM”. W tym przypadku nie używamy partycji, więc całe dane będą traktowane jako jeden i zamawiamy na podstawie pensji. Ważną rzeczą jest tutaj NIEOGRANICZONA PRECED I BIEŻĄCY WIERSZ. Oznacza to, że obliczamy sumę od pierwszego wiersza do bieżącego wiersza dla każdego wiersza. Ale jeśli widzimy wiersze z wynagrodzeniem 5000 i nazwą = „Pawan”, idealnie powinno być 17000, a dla pensji = 5000 i name = Mark, powinno to być 22000. Ale ponieważ używamy RANGE iw tym przypadku, jeśli znajdzie jakieś s podobieństwa elementów następnie traktuje je jako tę samą grupę logiczną i wykonuje na nich operację oraz przypisuje wartość do każdego elementu w tej grupie. To jest powód, dla którego mamy taką samą wartość wynagrodzenia = 5000. Silnik podniósł się do pensji = 5000, a Imię = Ron i wyliczył sumę, a następnie przypisał ją do wszystkich pensji = 5000.

Więc z WIERSZAMI MIĘDZY NIEOGRANICZONYMI POPRZEDNIĄ A BIEŻĄCĄ RZĄDĄ Różnica dotyczy pozycji o tej samej wartości grupując je razem, oblicza SUMĘ od wiersza początkowego do bieżącego wiersza i nie traktuje elementów o tej samej wartości inaczej niż RANGE

Te wyniki są takie same jak

Dzieje się tak, ponieważ Over (kolejność według pensji) to tylko skrót od Over (kolejność według pensji ZAKRES MIĘDZY NIEOGRANICZONYM PRECYDEM A BIEŻĄCĄ RZĄDĄ). ZAKRES MIĘDZY NIEOGRANICZONYM PRECYZYJNYM I BIEŻĄCYM WIERSZEM jako domyślny.

Uwaga: dotyczy to tylko funkcji, które faktycznie akceptują RANGE / ROW. Na przykład ROW_NUMBER i kilka innych nie akceptuje RANGE / ROW i w takim przypadku , to nie wchodzi w grę.

Do tej pory widzieliśmy, że klauzula Over z kolejnością według przyjmuje Range / ROWS, a składnia wygląda hing jak ten ZAKRES MIĘDZY NIEOGRANICZONYM PRECYZYJNYM I BIEŻĄCĄ ROWĄ I faktycznie oblicza do bieżącego wiersza od pierwszego wiersza. Ale co, jeśli chce obliczyć wartości dla całej partycji danych i mieć je dla każdej kolumny (czyli od pierwszego wiersza do ostatniego wiersza). Oto zapytanie do tego

Zamiast CURRENT ROW, określam UNBOUNDED FOLLOWING, co instruuje silnik, aby obliczał do ostatniego rekordu partycji dla każdego wiersza.

Teraz przechodzę do twojego zwrócić uwagę na to, co jest OVER () z pustymi nawiasami klamrowymi?

To jest tylko skrót do Over (uporządkuj według wynagrodzenia RZĘDY MIĘDZY NIEOGRANICZONYM PRECEDEM I UNBOUNDED FOLLOWING)

Tutaj pośrednio określamy aby traktować cały mój zestaw wyników jako jedną partycję, a następnie wykonywać obliczenia od pierwszego rekordu do ostatniego rekordu każdej partycji.

Stworzyłem film na ten temat i jeśli jesteś zainteresowany, możesz go odwiedzić. https://www.youtube.com/watch?v=CvVenuVUqto&t=1177s

Dzięki, Pavan Kumar AryasomayajuluHTTP: //xyzcoder.github.io

Write a Comment

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *