SQL DENSE_RANK() funksjon

Sql Dense Rank Funksjon



Vindusfunksjoner er en avgjørende funksjon i SQL og spiller en grunnleggende rolle i komplekse databeregninger og operasjoner i SQL-databaser. En av funksjonene i SQL-vindusfunksjonene er dense_rank().

DENSE_RANK()-funksjonen lar oss tilordne en unik rangering til hver rad i et resultatsett basert på verdiene i en mer spesifisert kolonne. Den er veldig lik rank()-funksjonen, men med små forskjeller i hvordan funksjonen håndterer de dupliserte postene.

I denne opplæringen vil vi utforske hvordan denne funksjonen fungerer, den medfølgende syntaksen og hvordan vi kan bruke den i en database.







Hvordan det fungerer

La oss starte med å forklare hvordan denne funksjonen fungerer. Det er greit å huske på at funksjonen er på høyt nivå, og vi kan ikke forklare den underliggende implementeringen.



Funksjonen fungerer ved å tilordne en rangering til hver rad i resultatsettet fra rangering 1 og øke med 1 for hver unike verdi i kolonnene.



Radene med lignende verdier (duplikater) i de angitte kolonnene tildeles samme rangering og neste rad med en annen verdi tildeles neste tilgjengelige rangering, uten hull.





Som vi nevnte, etterlater ikke funksjonen noen hull der det er dupliserte verdier som gjør den forskjellig fra rank()-funksjonen.

En vanlig bruk av funksjonen dense_rank() er å utføre rangeringsoperasjonene. For eksempel kan vi bruke den til å finne de beste N-postene osv.



Funksjonssyntaks:

Følgende beskriver syntaksen til dense_rank()-funksjonen:

DENSE_RANK() OVER (

[PARTITION BY partition_expression, ... ]

REKKEFØLGE BY sort_expression [ASC | DESC], ...

)

I den gitte syntaksen:

  1. Vi starter med selve dense_rank() funksjonen.
  2. OVER-klausulen signaliserer starten på vindusfunksjonsspesifikasjonene. Dette definerer hvordan rangeringen brukes i resultatsettet.
  3. PARTITION BY partition_expression er en valgfri klausul som lar oss partisjonere det resulterende settet i grupper eller partisjoner basert på en eller flere kolonner. Rangeringen brukes separat på hver partisjon med tilbakestilling av rangeringen på en ny partisjon.
  4. ORDER BY sort_expression spesifiserer rekkefølgen vi ønsker å bruke for å sortere dataene i de resulterende partisjonene.

Eksempeldata

For å demonstrere hvordan du bruker dense_rank()-funksjonen, la oss starte med en tabell med eksempeldata. I vårt tilfelle bruker vi en eksempel 'ordre'-tabell som følger:

Eksempel 1: Dense_Rank() funksjonsbruk

Vi kan bruke funksjonen dense_rank() for å rangere de resulterende ordrene basert på prisen. Tenk på følgende eksempelspørring:

PLUKKE UT

Bestillings ID,

kunde_brukernavn,

produkt_kjøpt,

DENSE_RANK() OVER (

REKKEFØLGE AV

pris DISC

) pris_rangering

FRA

bestillinger o;

I det gitte eksemplet bruker vi funksjonen dense_rank() for å rangere dataene basert på prisen på bestillinger. Vi utelater PARTITION BY-klausulen da vi ikke grupperer dataene.

Den resulterende utgangen er som følger:

Eksempel 2: PARTISERING AV

Vi kan også legge til PARTITION BY-klausulen for å gruppere dataene i ulike segmenter, for eksempel basert på produktet som er kjøpt.

Et eksempelspørsmål er som følger:

PLUKKE UT

Bestillings ID,

kunde_brukernavn,

produkt_kjøpt,

DENSE_RANK() OVER (

partisjon etter produkt_kjøpt

REKKEFØLGE AV

pris DISC

) pris_rangering

FRA

bestillinger o;

Dette bør gruppere dataene i ulike grupper basert på de resulterende gruppene og bruke rangeringen for elementene i hver gruppe.

Konklusjon

I dette innlegget lærte vi det grunnleggende om bruk og arbeid med dense_rank()-vindusfunksjonen i SQL for å tilordne en rangering til verdiene basert på spesifikke kolonner.