Udfordring: Brug af Vinduesfunktion
Lad os se på tabellen bank_accounts
, som vi har brugt i de foregående afsnit:
Antag, at vi ønsker at tilføje information til tabellen om hvilken klasse hver bruger tilhører baseret på deres kontosaldo.
Klasserne bestemmes som følger:
- En person, hvis kontosaldo er blandt de nederste
25%
, tilhører fjerde klasse; - En person, hvis kontosaldo er mellem
25%
og50%
, tilhører tredje klasse; - En person, hvis kontosaldo er mellem
50%
og75%
, tilhører anden klasse; - En person, hvis kontosaldo er blandt de øverste
25%
, tilhører første klasse.
For at løse dette problem kan vi bruge en vinduesfunktion kaldet NTILE()
.
Funktionen NTILE()
er en vinduesfunktion, der opdeler rækkerne i en ordnet partition i et angivet antal omtrent lige store grupper eller "tiles".
Den tildeler hver række et gruppenummer, startende fra 1
, baseret på hvilken gruppe rækken tilhører.
NTILE(num_buckets) OVER (
ORDER BY sort_column
)
Bemærk
I eksemplet behøver vi ikke at angive en
PARTITION BY
-klausul, fordi vi ønsker at anvendeNTILE()
-funktionen på hele resultatmængden, ikke på specifikke undergrupper eller partitioner af dataene.
ORDER BY
-klausulen er tilstrækkelig, da den definerer rækkefølgen, hvori rækkerne fordeles i tiles, hvilket sikrer, at grupperingen er baseret på den sorterede rækkefølge af lønninger på tværs af hele tabellen.
Hvis vi ønskede at beregne tiles inden for specifikke grupper (f.eks. afdelinger), ville vi brugePARTITION BY
.
Swipe to start coding
Din opgave er at anvende NTILE()
-funktionen for at få information om klassen for hver kontohaver.
Du skal:
- Angive antallet af klasser som argument til funktionen.
- Angive sortering efter kontosaldo for at bestemme klassen.
- Da vi antager, at den første klasse er klassen med den højeste saldo og så videre, skal vi sortere saldi i faldende rækkefølge.
Løsning
Tak for dine kommentarer!
single
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
How do I write a query to assign classes using NTILE() for this table?
Can you explain how NTILE() works with an example using these balances?
What would the result look like after adding the class column?
Awesome!
Completion rate improved to 4.35
Udfordring: Brug af Vinduesfunktion
Stryg for at vise menuen
Lad os se på tabellen bank_accounts
, som vi har brugt i de foregående afsnit:
Antag, at vi ønsker at tilføje information til tabellen om hvilken klasse hver bruger tilhører baseret på deres kontosaldo.
Klasserne bestemmes som følger:
- En person, hvis kontosaldo er blandt de nederste
25%
, tilhører fjerde klasse; - En person, hvis kontosaldo er mellem
25%
og50%
, tilhører tredje klasse; - En person, hvis kontosaldo er mellem
50%
og75%
, tilhører anden klasse; - En person, hvis kontosaldo er blandt de øverste
25%
, tilhører første klasse.
For at løse dette problem kan vi bruge en vinduesfunktion kaldet NTILE()
.
Funktionen NTILE()
er en vinduesfunktion, der opdeler rækkerne i en ordnet partition i et angivet antal omtrent lige store grupper eller "tiles".
Den tildeler hver række et gruppenummer, startende fra 1
, baseret på hvilken gruppe rækken tilhører.
NTILE(num_buckets) OVER (
ORDER BY sort_column
)
Bemærk
I eksemplet behøver vi ikke at angive en
PARTITION BY
-klausul, fordi vi ønsker at anvendeNTILE()
-funktionen på hele resultatmængden, ikke på specifikke undergrupper eller partitioner af dataene.
ORDER BY
-klausulen er tilstrækkelig, da den definerer rækkefølgen, hvori rækkerne fordeles i tiles, hvilket sikrer, at grupperingen er baseret på den sorterede rækkefølge af lønninger på tværs af hele tabellen.
Hvis vi ønskede at beregne tiles inden for specifikke grupper (f.eks. afdelinger), ville vi brugePARTITION BY
.
Swipe to start coding
Din opgave er at anvende NTILE()
-funktionen for at få information om klassen for hver kontohaver.
Du skal:
- Angive antallet af klasser som argument til funktionen.
- Angive sortering efter kontosaldo for at bestemme klassen.
- Da vi antager, at den første klasse er klassen med den højeste saldo og så videre, skal vi sortere saldi i faldende rækkefølge.
Løsning
Tak for dine kommentarer!
Awesome!
Completion rate improved to 4.35single