De SQL OVER () -clausule – wanneer en waarom is deze nuttig?

Dus in eenvoudige bewoordingen: de Over-clausule kan worden gebruikt om niet-geaggregeerde waarden samen met geaggregeerde waarden te selecteren.

Partition BY, ORDER BY inside, en ROWS or RANGE maken deel uit van OVER () by clausule.

partitioneren door wordt gebruikt om gegevens te partitioneren en vervolgens dit venster uit te voeren, geaggregeerde functies, en als we dat niet doen hebben partitie door de dan volledige resultatenset wordt beschouwd als een enkele partitie.

Laten we de basissyntaxis van de OVER-clausule bekijken

PARTITIE DOOR: Het wordt gebruikt om gegevens te partitioneren en bewerkingen uit te voeren op groepen met dezelfde gegevens.

ORDER BY: Het wordt gebruikt om de logische volgorde van gegevens in partities te definiëren. Als we geen partitie specificeren, wordt de gehele resultatenset beschouwd als een enkele partitie.

: Dit kan gebruikt worden om te specificeren welke rijen in een partitie beschouwd moeten worden bij het uitvoeren van de operatie.

Laten we een voorbeeld nemen:

Hier is mijn dataset:

Dus laat me verschillende scenario’s uitvoeren en zien hoe de gegevens worden beïnvloed, en ik kom van een moeilijke syntaxis tot een eenvoudige one

Let gewoon op het sum_sal-gedeelte. Hier gebruik ik volgorde op salaris en gebruik ik “BEREIK TUSSEN ONGEBONDEN VÓÓR EN HUIDIGE RIJ”. In dit geval gebruiken we geen partitie, dus alle gegevens worden als één partitie en we bestellen op salaris. En het belangrijkste hier is ONGEBONDEN VOORAFGAANDE EN HUIDIGE RIJ. Dit betekent dat wanneer we de som berekenen, van de beginrij tot de huidige rij voor elke rij. Maar als we rijen zien met salaris 5000 en naam = “Pavan”, idealiter zou het 17000 moeten zijn en voor salaris = 5000 en name = Mark, zou het 22000 moeten zijn. Maar aangezien we RANGE gebruiken en in dit geval, als het een s vindt gelijke elementen beschouwt het ze dan als dezelfde logische groep en voert er een bewerking op uit en kent waarde toe aan elk item in die groep. Dat is de reden waarom we dezelfde waarde hebben voor salaris = 5000. De motor ging omhoog naar salaris = 5000 en Naam = Ron en berekende som en wees het vervolgens toe aan al salaris = 5000.

Dus met RIJEN TUSSEN ONGEBONDEN VOORAFGAANDE EN HUIDIGE RIJ Het verschil is voor items met dezelfde waarde in plaats van door ze samen te groeperen, berekent het SUM van de beginrij tot de huidige rij en het behandelt items met dezelfde waarde niet anders zoals RANGE

Deze resultaten zijn hetzelfde als

Dat komt omdat Over (sorteer op salaris) slechts een kortere weg is van Over (sorteer op salaris BEREIK TUSSEN ONGEBONDEN VÓÓR EN HUIDIGE RIJ) Dus waar we ook gewoon aangeven dat Order by zonder RIJEN of RANGE BEREIK TUSSEN ONGEBONDEN VOORAFGAANDE EN HUIDIGE RIJ als standaard.

Opmerking: dit is alleen van toepassing op functies die daadwerkelijk RANGE / ROW accepteren. ROW_NUMBER en enkele anderen accepteren bijvoorbeeld geen RANGE / ROW en in dat geval , komt dit niet in beeld.

Tot nu toe zagen we dat de Over-clausule met een order door Range / ROWS neemt en de syntaxis er soms hing als dit BEREIK TUSSEN ONGEBONDEN VOORAFGAANDE EN HUIDIGE RIJ En het berekent feitelijk tot aan de huidige rij vanaf de eerste rij. Maar wat als het waarden wil berekenen voor de volledige gegevenspartitie en het voor elke kolom wil hebben (dat is van de eerste rij tot de laatste rij). Hier is de vraag daarvoor.

In plaats van CURRENT ROW, specificeer ik UNBOUNDED FOLLOWING die de engine instrueert om te berekenen tot het laatste record van partitie voor elke rij.

Komt nu naar uw wijs op wat OVER () is met lege accolades?

Het is slechts een kortere weg voor Over (sorteer op salaris RIJEN TUSSEN ONGEBONDEN VOORAFGAANDE EN ONGEBONDEN VOLGENDE)

Hier specificeren we indirect om al mijn resultatenset als een enkele partitie te behandelen en vervolgens berekeningen uit te voeren van het eerste record tot het laatste record van elke partitie.

Ik heb hier een video over gemaakt en als je geïnteresseerd bent, kun je het bezoeken. https://www.youtube.com/watch?v=CvVenuVUqto&t=1177s

Bedankt, Pavan Kumar AryasomayajuluHTTP: //xyzcoder.github.io

Write a Comment

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *