sql >> Databáze >  >> RDS >> Database

Datový kurz:Používání funkcí okna

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

  1. Chyba při nastavování n_distinct pomocí proměnné plpgsql

  2. psql - uložit výsledky příkazu do souboru

  3. Co byste měli vědět o webech založených na databázi

  4. phpMyAdmin na MySQL 8.0