Co jsou funkce okna?
Funkce okna umožňují uživatelům provádět výpočty proti oddílům (tj. podskupinám nebo oddílům) sady výsledků, obvykle tabulky nebo výsledků z jiného dotazu. Na rozdíl od tradičních agregačních funkcí, které vracejí pouze jednu hodnotu pro každou skupinu definovanou v dotazu, vracejí okenní funkce jednu hodnotu pro každý vstupní řádek.
Jak jsou užitečné funkce okna?
Funkce oken zvyšují efektivitu a snižují složitost dotazů, které analyzují oddíly (okna) datové sady tím, že poskytují alternativu ke složitějším konceptům SQL, např. odvozené dotazy. Mezi běžné případy použití patří:
- Hodnocení výsledků v rámci konkrétního okna (např. hodnocení podle skupiny)
- Přístup k údajům z jiného řádku v konkrétním okně (např. přehledy za období)
- Agregace v rámci konkrétního okna (např. průběžné součty):
Jak používat funkce okna
Funkce okna se spouští pomocí OVER
klauzule a jsou konfigurovány pomocí tří konceptů:
- oddíl okna (
PARTITION BY
) - seskupuje řádky do oddílů - uspořádání oken (
ORDER BY
) - definuje pořadí nebo sekvenci řádků v každém okně - rám okna (
ROWS
) - definuje okno pomocí offsetu od zadaného řádku
Přehled syntaxe
function (expression) OVER
( [ PARTITION BY expression_list ]
[ ORDER BY order_list ]
[ ROWS frame_clause ])
Definice
- seznam_výrazů:seznam výrazů oddělených čárkami, obvykle názvy sloupců
- order_list:seznam výrazů oddělených čárkami, obvykle názvy sloupců
- frame_clause:definujte odsazení pomocí
CURRENT ROW
,_value_ PRECEDING
,UNBOUNDED PRECEDING
,_value_ FOLLOWING
,UNBOUNDED FOLLOWING
Příklady
Hodnocení:hodnocení podle skupiny
SELECT
campaign
, month
, total_cost
, rank() OVER (PARTITION BY month ORDER BY month DESC, total_cost DESC) as "rank"
FROM Cost_by_Month
LIMIT 8
Předchozí řádek:analýza období po období
SELECT
campaign
, month
, total_cost
, LAG(total_cost, 1) OVER (ORDER BY campaign, month) as "previous total cost"
FROM Cost_by_Month
WHERE campaign = 'TV'
LIMIT 4
Agregace v rámci okna:průběžné součty
SELECT
campaign, month, monthly_cost
, sum(monthly_cost) OVER (PARTITION BY campaign ORDER BY month ROWS BETWEEN UNBOUNDED
PRECEDING and CURRENT ROW) as "running cost total"
FROM Cost_by_Month
Seznam dokumentů a funkcí:
Upozorňujeme, že mezi jednotlivými databázemi existují jemné rozdíly v použití a syntaxi. Pro informace specifické pro vaši implementaci použijte prosím níže uvedenou dokumentaci specifickou pro zdroj.
Postgres
- Výukový program
- Funkce
Červený posuv
- Výukový program
- Funkce
Oracle
- Výukový program
SQLServer
- Výukový program
BigQuery
- Výukový program