Jedním z běžných statistických výpočtů, které se objevují i při správě databáze, je percentil.
Percentil je statistická míra, která nám umožňuje rozdělit soubor dat na stejné části segmentů. Úlohou percentilů je poskytnout náhled na distribuci dat, což je způsob, jakým rozumíme tomu, jak jsou hodnoty rozloženy.
V tomto tutoriálu se naučíme, jak můžeme vypočítat percentily v SQL pro rozdělení dat do různých segmentů.
Vzorová tabulka
Začněme nastavením základní tabulky, která obsahuje vzorová data pro demonstrační účely. To nám pomáhá ilustrovat, jak se chovají různé metody výpočtu percentilů a výsledný výstup.
Vytvořme tabulku nazvanou „produkty“, která obsahuje informace o potravinách. Klauzule „vytvořit tabulku“ je následující:
CREATE TABLE produkty (
product_id INT PRIMARY KEY AUTO_INCREMENT,
název_produktu VARCHAR( 255 ),
kategorie VARCHAR( 255 ),
cena DECIMAL( 10 , 2 ),
množství INT,
expiration_date DATE,
čárový kód VELKÝ
);
Jakmile jsme vytvořili tabulku, můžeme pokračovat a přidat ukázková data do tabulky. Můžeme použít následující příkazy „vložit“:
vložitdo
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty ( 'Kuchařská čepice 25 cm' ,
'pekařství' ,
24,67 ,
57 ,
'2023-09-09' ,
2854509564204 );
vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty ( „Křepelčí vejce – konzerva“ ,
'spíž' ,
17,99 ,
67 ,
'2023-09-29' ,
1708039594250 );
vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty ( 'Káva – vaječný likér capuccino' ,
'pekařství' ,
92,53 ,
10 ,
'2023-09-22' ,
8704051853058 );
vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty ( 'Hruška - pichlavý' ,
'pekařství' ,
65,29 ,
48 ,
'2023-08-23' ,
5174927442238 );
vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty ( 'Těstoviny - andělské vlasy' ,
'spíž' ,
48,38 ,
59 ,
'2023-08-05' ,
8008123704782 );
vložit
do
produkty (název_produktu,
kategorie,
cena,
Množství,
Datum spotřeby,
čárový kód)
hodnoty ( 'Víno - Prosecco Valdobiaddene' ,
'vyrobit' ,
44,18 ,
3 ,
'2023-03-13' ,
6470981735653 );
Na konci byste měli mít následující tabulku:
SQL percentil
Jak můžete hádat, způsob výpočtu percentilu se může lišit v závislosti na databázovém stroji. Nejběžnější metodou je však použití funkcí PERCENTILE_DISC() a PERCENTILE_CONT().
Tyto funkce jsou součástí standardní specifikace SQL (2003). Proto musí být podporován PostgreSQL a Oracle.
PERCENTILE_CONT()
Začněme funkcí PERCENTILE_CONT(). Tato funkce nám umožňuje vypočítat percentilové hodnoty jako zlomek datové sady.
Funkce vrací interpolované hodnoty, které nemusí být přesné pro konkrétní datový bod ve vaší datové sadě.
Syntaxe funkce je následující:
PERCENTILE_CONT(percentil) WITHIN SKUPINA ( OBJEDNAT BY název_sloupce) NAD ();Funkce přijímá následující parametry:
- Percentil – Určuje požadovanou hodnotu percentilu (0,0 až 1,0).
- název_sloupce – Označuje sloupec, pro který chceme vypočítat percentil.
- NAD () – Nastaví funkci okna tak, aby specifikovala celou datovou sadu.
Příklad použití této funkce je následující:
VYBRATPERCENTILE_CONT( 0,5 ) V RÁMCI SKUPINA ( OBJEDNAT PODLE ceny) NAD () JAKO medián
Z
produkty;
Poznámka: Daný dotaz funguje pouze v PostgreSQL, protože MySQL nepodporuje použití WITHIN GROUP.
Tím se počítá 50 čt percentil poskytnutých dat.
PERCENTILE_DISC()
Pomocí funkce PERCENTILE_DISC() můžeme vypočítat hodnotu percentilu jako diskrétní hodnotu přímo z datové sady.
Funkce vrací hodnotu, která odpovídá skutečnému datovému bodu.
Syntaxe funkce je následující (PostgreSQL):
PERCENTILE_DISC(percentil) WITHIN SKUPINA ( OBJEDNAT BY název_sloupce) NAD ();Příklad výstupu je následující:
VYBRATPERCENTILE_DISC( 0,25 ) V RÁMCI SKUPINA ( OBJEDNAT PODLE ceny) NAD () JAKO percentil_25
Z
produkty;
To by mělo vypočítat 25 čt percentil dat.
Závěr
Tento tutoriál se zabýval tím, jak používat různé funkce k výpočtu percentilů v databázích SQL.