PostgreSQL

PostgreSQL NTILE-vensterfunctie

PostgreSQL NTILE-vensterfunctie
Window-methoden in PostgreSQL zijn afgeschaft om uiteenlopende gegevens gelijk te stellen en zijn essentieel voor analytische en andere PostgreSQL-gebruiksgevallen. De methode NTILE() gevolgd door de clausule OVER in PostgreSQL wordt weggegooid om georganiseerde rijen te verdelen in een soort reeks gesorteerde buckets. Emmers zijn niet meer dan een reeks gerangschikte groepen. In dit artikel zult u ontdekken hoe u gesorteerde rijen in een partitie kunt splitsen in een bepaald aantal gerangschikte buckets met behulp van de PostgreSQL NTILE()-functie. De methode NTILE() wijst een bucketnummer toe aan elke groep die begint bij 1 in een set, waarmee wordt aangetoond in welke set de rij hoort.

Syntaxis:

>> NTILE(buckets) OVER ( [PARTITION BY partitie-uitdrukking,… ] [ORDET BY sorteeruitdrukking]) [ASC | DESC],… ]);

Om de NTILE-methode te begrijpen, logt u eerst in vanuit de PostgreSQL-shell. Probeer daarom de PostgreSQL-opdrachtregelshell vanuit de toepassingen te starten. Om op een andere server te werken, voert u de naam van een server in; druk anders op Enter. Als u moet oefenen op de eerder aangewezen database, e.g., Postgres, druk dan op Enter of schrijf een databanktitel in, e.g. 'test'. Om een ​​andere poort dan 5432 te gebruiken, schrijft u deze uit; zo niet, laat het dan zoals het is en druk op Enter om verder te gaan. Het kan u vragen om de gebruikersnaam in te voeren voor het geval u moet overschakelen naar een nieuwe gebruikersnaam. Voer de gebruikersnaam in; anders, druk gewoon op Enter. Ten slotte moet u uw huidige gebruikerswachtwoord invoeren om over te schakelen met behulp van de opdrachtregel met behulp van die specifieke gebruiker zoals hieronder:. Vervolgens, effectieve invoer van alle verplichte gegevens, kunt u aan de slag met NTILE.

Om aan NTILE te gaan werken, moet u een nieuwe tabel maken met het CREATE-commando als u er nog geen heeft. Denk na over de onderstaande tabel "werknemer" in uw PostgreSQL-database met de naam 'test'. Deze tabel bevat vier kolommen e.g., ID, naam, leeftijd en salaris van een werknemer van een bepaald bedrijf. Elke kolom heeft in totaal 10 rijen, wat 10 records in elk kolomveld betekent means.

>> KIES * VAN medewerker;

In het begin moeten we het eenvoudige concept begrijpen van het ophalen van records uit een tabel met behulp van de ORDER BY-component. We hebben het onderstaande SELECT-commando uitgevoerd zonder NTILE te gebruiken om het concept kort uit te werken en te begrijpen. We halen records voor kolommen op; naam, leeftijd en salaris bij het sorteren van de records in oplopende volgorde van veld "leeftijd". U kunt zien dat het alleen de records weergeeft zoals weergegeven in de afbeelding.

>> SELECTEER naam, leeftijd, salaris VAN werknemer ORDER OP leeftijd;

Gebruik van NTILE() OVER met ORDER BY-clausule:

Laten we, uitgaande van dezelfde tabel "employee", beginnen met het gebruik van de NTILE() OVER-clausule in ons voorbeeld. In dit voorbeeld hebben we de twee kolommen geselecteerd; naam en salaris, terwijl het resultaat wordt gesorteerd in oplopende volgorde van een kolom "salaris". De uitkomst bevat gegevens waarbij de leeftijd van een werknemer hoger is dan 24 jaar. We hebben de waarde van de NTILE-bucket gedefinieerd als "3" omdat we rijen willen verdelen in 3 buckets, e.g., 1 tot 3. U kunt zien dat de rijen met succes zijn verdeeld in 3 gelijke emmers, met 3 rijen in elke emmer.

>> SELECTEER naam, salaris, NTILE(3) BOVEN(ORDER OP salaris) VANMedewerker WAAR leeftijd > '24';

Laten we nu een ander voorbeeld nemen terwijl we dezelfde tabel "werknemer" gebruiken. Deze keer willen we de records van drie kolommen ophalen; naam, leeftijd en salaris met behulp van de SELECT-query in de opdrachtshell. Er zijn kleine wijzigingen in de WHERE-clausule. Momenteel hebben we gezocht naar de records van de tabel "werknemer" waar de leeftijd minder dan 27 jaar is, wat alleen de records met een leeftijd van minder dan 27 zal krijgen. Aan de andere kant is er geen verandering in een bucketwaarde, want het is weer 3. Bij het proberen van de genoemde opdracht, hebben we slechts drie records gevonden, gelijk verdeeld in 3 emmers zoals weergegeven in de afbeelding.

>> SELECTEER naam, leeftijd, salaris, NTILE(3) OVER (ORDER OP salaris) VAN werknemer WAAR leeftijd < '27';

Gebruik van NTILE() OVER met ORDER BY en PARTITION BY clausule:

Laten we een voorbeeld nemen van NTILE() OVER terwijl we de clausules PARTITION BY en ORDER BY tegelijkertijd gebruiken. Stel dat de ongewijzigde tabel “werknemer” uit een database “test” wordt gebruikt. In dit voorbeeld moet je de drie kolommen selecteren; naam, leeftijd en salaris, terwijl sorteren op oplopende manier van een veld "leeftijd". Bovendien hebben we de PARTITION BY-clausule in de kolom "salaris" gebruikt om partities van een tabel te maken volgens deze kolom. Er is geen specifieke voorwaarde die in deze specifieke zoekopdracht is gebruikt, wat betekent dat alle records van de tabel "werknemer" worden weergegeven. De NTILE-bucket heeft een waarde van "3". Bij het uitvoeren van de onderstaande query, ziet u het onderstaande resultaat:. De partities worden gedaan volgens de verschillende waarden van kolom "salaris". Alle waarden van kolom "salaris" zijn verschillend, daarom ligt het in verschillende partities behalve de waarde "60000". Dit betekent dat elke partitie 1 waarde heeft behalve één. Daarna werden alle partitierijen gerangschikt via buckets. Slechts één emmer kreeg de 2e rang.

>> SELECTEER naam, leeftijd, salaris, NTILE(3) OVER (VERDELING OP salaris, BESTELLING OP leeftijd) VAN werknemer;

Hetzelfde voorbeeld nemen van NTILE() OVER met het gebruik van de clausule PARTITION BY en ORDER BY met een WHERE-clausule. In de WHERE-clausule hebben we de voorwaarde gedefinieerd, die zegt dat de enige records die worden opgehaald, zijn wanneer de leeftijd van de werknemer minder dan 27 jaar is. We hebben maar 3 resultaten met 2 partities volgens leeftijd en "ntile" kolom met rangen.

>> SELECTEER naam, leeftijd, salaris, NTILE(3) OVER (VERDELING OP salaris, ORDER OP leeftijd) VAN werknemer WAAR leeftijd < '27';

Conclusie:

In deze handleiding hebben we verschillende voorbeelden van ntile-functies besproken. U kunt ze implementeren volgens uw behoefte.

5 beste arcade-spellen voor Linux
Tegenwoordig zijn computers serieuze machines die worden gebruikt om te gamen. Als je de nieuwe hoge score niet kunt halen, weet je wat ik bedoel. In ...
Strijd om Wesnoth 1.13.6 Ontwikkeling vrijgegeven
Strijd om Wesnoth 1.13.6 die vorige maand werd uitgebracht, is de zesde ontwikkelingsrelease in de 1.13.x-serie en het levert een aantal verbeteringen...
Hoe League Of Legends op Ubuntu 14 te installeren.04
Als je fan bent van League of Legends, dan is dit een kans voor jou om League of Legends te testen. Merk op dat LOL wordt ondersteund op PlayOnLinux a...