paint-brush
SQL lango funkcijos: greita apžvalga su pavyzdžiaispateikė@luca1iu
Nauja istorija

SQL lango funkcijos: greita apžvalga su pavyzdžiais

pateikė Luca Liu5m2025/01/05
Read on Terminal Reader

Per ilgai; Skaityti

Langų funkcijos yra galinga SQL funkcija, naudojama atlikti skaičiavimus su dabartine eilute susijusių eilučių rinkinyje. Skirtingai nuo suvestinių funkcijų, lango funkcijos negrupuoja eilučių į vieną išvestį. Jie pateikia kiekvienos eilutės rezultatą, išlaikydami duomenų rinkinio kontekstą.
featured image - SQL lango funkcijos: greita apžvalga su pavyzdžiais
Luca Liu HackerNoon profile picture


Įvadas

Langų funkcijos yra galinga SQL funkcija, naudojama atlikti skaičiavimus su dabartine eilute susijusių eilučių rinkinyje. Skirtingai nei agregacinės funkcijos, lango funkcijos negrupuoja eilučių į vieną išvestį; jie pateikia kiekvienos eilutės rezultatą, išlaikydami duomenų rinkinio kontekstą.


Šiame straipsnyje su pavyzdžiais išnagrinėsime kai kurias dažniausiai naudojamas SQL lango funkcijas ( ROW_NUMBER() , RANK() , DENSE_RANK() , NTILE() , LEAD() ir LAG() ).

Lentelės pavyzdys: pardavimo duomenys

Lango funkcijoms demonstruoti naudosime šią pardavimo lentelę:

Pardavimo ID

Kliento ID

Produktas

Regionas

Suma

Išpardavimo data

1

101

Nešiojamasis kompiuteris

Šiaurė

1200

2023-01-05

2

102

Planšetinis kompiuteris

Šiaurė

800

2023-02-15

3

103

Telefonas

Šiaurė

800

2023-03-10

4

104

Planšetinis kompiuteris

Šiaurė

500

2023-04-01

5

105

Nešiojamasis kompiuteris

Pietų

1300

2023-05-05

6

106

Planšetinis kompiuteris

Pietų

700

2023-06-20

7

107

Telefonas

Vakarai

900

2023-07-15

8

108

Nešiojamasis kompiuteris

Rytai

1300

2023-08-10

1. ROW_NUMBER ()

Funkcija ROW_NUMBER() kiekvienai skaidinio eilutei priskiria unikalų numerį, suskirstytą pagal nurodytą stulpelį.


Užduotis : kiekvienam regiono pardavimui priskirkite unikalų eilutės numerį, atsižvelgdami į pardavimo sumą (nuo didžiausios iki mažiausios).

 SELECT SalesID, Region, Amount, ROW_NUMBER() OVER (PARTITION BY Region ORDER BY Amount DESC) AS RowNum FROM Sales;

Rezultatas :

Pardavimo ID

Regionas

Suma

EilutėsNum

1

Šiaurė

1200

1

2

Šiaurė

800

2

3

Šiaurė

800

3

4

Šiaurė

500

4

5

Pietų

1300

1

6

Pietų

700

2

7

Vakarai

900

1

8

Rytai

1300

1

2. RANKO ()

Funkcija RANK() priskiria reitingą kiekvienai skaidinio eilutei. Eilutės su tomis pačiomis reikšmėmis gauna tą patį reitingą, o kitas reitingas praleidžiamas.


Užduotis : Įvertinkite pardavimus kiekviename regione pagal sumą (nuo didžiausio iki mažiausio).

 SELECT SalesID, Region, Amount, RANK() OVER (PARTITION BY Region ORDER BY Amount DESC) AS Rank FROM Sales;

Rezultatas :

Pardavimo ID

Regionas

Suma

Reitingas

1

Šiaurė

1200

1

2

Šiaurė

800

2

3

Šiaurė

800

2

4

Šiaurė

500

4

5

Pietų

1300

1

6

Pietų

700

2

7

Vakarai

900

1

8

Rytai

1300

1

Pagrindinė funkcija :

  • Šiaurės regione abi suma = 800 eilučių užima 2 vietą.


  • Kitas reitingas praleidžiamas (ty nėra 3 rango) ir peršoka į 4.

3. DENSE_RANK()

Funkcija DENSE_RANK() priskiria tokias eiles kaip RANK(), bet ji nepraleidžia eilių po lygiųjų.


Užduotis : priskirkite pardavimų tankius reitingus kiekviename regione pagal kiekį (nuo didžiausio iki mažiausio).

 SELECT SalesID, Region, Amount, DENSE_RANK() OVER (PARTITION BY Region ORDER BY Amount DESC) AS DenseRank FROM Sales;

Rezultatas :

Pardavimo ID

Regionas

Suma

DenseRank

1

Šiaurė

1200

1

2

Šiaurė

800

2

3

Šiaurė

800

2

4

Šiaurė

500

3

5

Pietų

1300

1

6

Pietų

700

2

7

Vakarai

900

1

8

Rytai

1300

1

Pagrindinė funkcija :

  • Šiaurės regione abi suma = 800 eilučių užima 2 vietą.


  • Kitas rangas yra 3, gretų nepraleidžiant.

4. TILE()

NTILE() padalija eilutes į nurodytą skaičių maždaug vienodų grupių.


Užduotis : Padalinkite visus pardavimus į 4 grupes pagal sumą mažėjančia tvarka.

 SELECT SalesID, Amount, NTILE(4) OVER (ORDER BY Amount DESC) AS Quartile FROM Sales;

Rezultatas :

Pardavimo ID

Suma

Kvartilis

5

1300

1

8

1300

1

1

1200

2

7

900

2

2

800

3

3

800

3

4

500

4

6

700

4

5. LEAD ()

LEAD() nuskaito reikšmę iš kitos to paties skaidinio eilutės.


Užduotis : palyginkite kiekvieną pardavimo sumą su kita pardavimo suma, užsakyta pagal SaleDate.

 SELECT SalesID, Amount, LEAD(Amount) OVER (ORDER BY SaleDate) AS NextAmount FROM Sales;

Rezultatas :

Pardavimo ID

Suma

KitasAmount

1

1200

800

2

800

800

3

800

500

4

500

1300

5

1300

700

6

700

900

7

900

1300

8

1300

NULL

6. VVG()

LAG() nuskaito vertę iš ankstesnės eilutės tame pačiame skaidinyje.


Užduotis : palyginkite kiekvieną pardavimo sumą su ankstesne pardavimo suma, užsakyta pagal SaleDate.

 SELECT SalesID, Amount, LAG(Amount) OVER (ORDER BY SaleDate) AS PrevAmount FROM Sales;

Rezultatas :

Pardavimo ID

Suma

Ankstesnė suma

1

1200

NULL

2

800

1200

3

800

800

4

500

800

5

1300

500

6

700

1300

7

900

700

8

1300

900

Išvada

SQL lango funkcijos, tokios kaip ROW_NUMBER(), RANK(), DENSE_RANK(), NTILE(), LEAD() ir LAG() suteikia galingų būdų analizuoti duomenis skaidiniuose.


Pagrindiniai patiekalai:

  • ROW_NUMBER() kiekvienai eilutei priskiria unikalų identifikatorių.
  • RANK() ir DENSE_RANK() skiriasi tuo, kaip jie tvarko ryšius (praleidžiant ir be praleidimo).
  • NTILE() naudinga skirstant eilutes į statistines grupes.
  • LEAD() ir LAG() leidžia palyginti su gretimomis eilutėmis.


Įvaldę šias funkcijas, galite efektyviai atlikti sudėtingas analizės ir reitingavimo užduotis!


Dėkojame, kad skyrėte laiko su manimi tyrinėti su duomenimis susijusias įžvalgas. Aš vertinu jūsų sužadėtuves. Jei ši informacija jums naudinga, kviečiu jus sekti mane arba susisiekti su manimi LinkedIn . Smagaus tyrinėjimo! 👋

L O A D I N G
. . . comments & more!

About Author

Luca Liu HackerNoon profile picture
Luca Liu@luca1iu
Hello there! 👋 I'm Luca, a BI Developer with a passion for all things data, Proficient in Python, SQL and Power BI

PABAIGTI ŽYMES

ŠIS STRAIPSNIS BUVO PRISTATYMAS...