SQL OVER () -satsen – när och varför är den användbar?

Så med enkla ord: Over-satsen kan användas för att välja icke aggregerade värden tillsammans med aggregerade.

Partition BY, ORDER BY inuti, och ROWS eller RANGE är en del av OVER () per paragraf.

partition by används för att partitionera data och sedan utföra dessa fönster, aggregerade funktioner, och om vi inte ha partition av den då hela resultatuppsättningen betraktas som en enda partition.

Låt oss se grundläggande syntax för OVER-satsen

PARTITION BY: Den används för att partitionera data och utföra operationer på grupper med samma data.

ORDER BY: Den används för att definiera den logiska ordningen på data i Partitions. När vi inte anger partition, betraktas hela resultatuppsättningen som en enda partition

: Detta kan användas för att ange vilka rader som ska anses betraktas i en partition när operationen utförs.

Låt oss ta ett exempel:

Här är min dataset:

Så låt mig köra olika scenarier och se hur data påverkas och jag kommer från svår syntax till enkel en

Observera bara summan-sal-delen. Här använder jag ordning från lön och använder ”RANGE MELLAN OBEGRÄNSAD FÖRFÖRANDE OCH AKTUELL RAD”. I det här fallet använder vi inte partition så hela data kommer att behandlas som en partition och vi beställer på lön. Och det viktiga här är OBEGRÄNSAD FÖRFÖRANDE OCH AKTUELL RAD. Det betyder när vi beräknar summan, från startrad till aktuell rad för varje rad. Men om vi ser rader med lön 5000 och namn = ”Pavan”, helst bör det vara 17000 och för lön = 5000 och namn = Mark, bör det vara 22000. Men eftersom vi använder RANGE och i det här fallet, om det hittar några likartade element, då betraktar de dem som samma logiska grupp och utför en operation på dem och tilldelar värde till varje objekt i den gruppen. Det är anledningen till att vi har samma värde för lön = 5000. Motorn gick upp till lön = 5000 och Namn = Ron och beräknade summan och tilldelade den sedan till alla löner = 5000. gruppera dem, det beräknar SUM från startrad till aktuell rad och det behandlar inte objekt med samma värde annorlunda som RANGE

Dessa resultat är desamma som

Det beror på att Over (lönebeställning) bara är en genväg till Over (beställning efter lön RANGE MELLAN OBEGRÄNSAD FÖRFÖRANDE OCH AKTUELL RAD) Så varhelst vi bara anger Beställ utan utan RADER eller RANGE tar det RANGE MELLAN OBEGRÄNSAD FÖRFÖRANDE OCH AKTUELL RAD som standard.

Obs: Detta gäller endast för funktioner som faktiskt accepterar RANGE / ROW. Till exempel ROW_NUMBER och få andra accepterar inte RANGE / ROW och i så fall , detta kommer inte in i bilden.

Fram till nu såg vi att Over-klausul med en order genom att ta Range / ROWS och syntax ser ut som som detta RANGE MELLAN OBEGRÄNSAD FÖRFÖRANDE OCH AKTUELL RAD Och det räknar faktiskt upp till den aktuella raden från första raden. Men vad om det vill beräkna värden för hela datapartitionen och ha det för varje kolumn (det är från första raden till sista raden). Här är frågan för det

I stället för CURRENT ROW, specificerar jag UNBOUNDED FOLLOWING som instruerar motorn att beräkna till den sista posten av partition för varje rad.

Kommer nu till din peka på vad som är OVER () med tomma hängslen?

Det är bara en genväg för Over (order efter lön RADER MELLAN OBEGRÄNSAD FÖRFÖRANDE OCH OBEGRÄNSAD FÖLJANDE)

Här specificerar vi indirekt att behandla alla mina resultatuppsättningar som en enda partition och sedan göra beräkningar från den första posten till den sista posten för varje partition.

Jag skapade en video om detta och om du är intresserad kan du besöka den. https://www.youtube.com/watch?v=CvVenuVUqto&t=1177s

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

Write a Comment

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *