Lahat ng karaniwang SQL window function at ang mga clause na kumokontrol sa mga ito, pinangkat ayon sa gawain: mag-rank ng mga row, tumingin sa mga katabing row, magpatakbo ng kabuuan sa isang frame, at kunin ang unang o huling value. Bawat row ay pinapares ang function sa isang halimbawang isang linya.
Ang window function ay nagkakompyut ng resulta sa mga row na kaugnay ng kasalukuyang row, nang hindi pinagsasama-sama ang mga ito tulad ng ginagawa ng GROUP BY. Ang bawat window function ay nagtatapos sa isang OVER clause na tumutukoy sa window: inilalahad ng PARTITION BY ang mga row sa mga grupo, inaayos ng ORDER BY ang mga ito, at ang opsyonal na frame ang naglilimita sa gumagalaw na hanay. Pag-masterin mo ang OVER at ang natitira ay bokabularyo na lamang.
Talaan ng sanggunian · 27 mga entry
Mga SQL Window FunctionExplained
27 of 27 rows
Pagraranggo
Isang natatanging sunod-sunod na integer para sa bawat row sa loob ng window.
ROW_NUMBER() OVER (ORDER BY total DESC)
Ranggong may mga patlang; nagtutugma ang mga tie sa isang ranggo at lumalaktaw sa susunod na mga numero.
RANK() OVER (ORDER BY total DESC)
Ranggong walang patlang; nagtutugma ang mga tie sa isang ranggo at walang lumalaktaw.
DENSE_RANK() OVER (ORDER BY total DESC)
Hinihiwa ang nakaayos na window sa n na halos pantay na bucket.
NTILE(4) OVER (ORDER BY total DESC)
Tingnan ang mga katabing row
Value mula n row pabalik; papalitan ito ng default kapag walang ganoong row.
LAG(total, 1, 0) OVER (ORDER BY created_at)
Value mula n row pasulong; papalitan ito ng default kapag walang ganoong row.
LEAD(total, 1, 0) OVER (ORDER BY created_at)
Aggregate sa ibabaw ng window
Kabuuang tumatakbo o per-partition nang hindi pinagsasama ang mga row.
SUM(total) OVER (ORDER BY created_at)
Average na tumatakbo o per-partition.
AVG(total) OVER (PARTITION BY user_id)
Bilang ng row na tumatakbo o per-partition.
COUNT(*) OVER (PARTITION BY user_id)
Ang pinakamababang value sa buong window o partition.
MIN(total) OVER (PARTITION BY user_id)
Ang pinakamataas na value sa buong window o partition.
MAX(total) OVER (PARTITION BY user_id)
SUM na may ORDER BY at frame na bukas mula sa simula; bawat row ay nagbubuod ng lahat hanggang sa sarili nito.
SUM(total) OVER (ORDER BY created_at ROWS UNBOUNDED PRECEDING)
AVG sa isang frame na sakop ang n row bago at pagkatapos ng kasalukuyang row.
AVG(total) OVER (ORDER BY created_at ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING)
Una, huli, at percentile
Ang unang value sa pagkakasunod-sunod ng window.
FIRST_VALUE(total) OVER (ORDER BY total DESC)
Ang huling value sa frame; nang walang UNBOUNDED FOLLOWING, humihinto ang frame sa kasalukuyang row.
LAST_VALUE(total) OVER (ORDER BY total ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
Ang value sa ikap-n na row ng pagkakasunod-sunod ng window.
NTH_VALUE(total, 2) OVER (ORDER BY total DESC)
Ang relatibong ranggo ng isang row, mula 0 hanggang 1.
PERCENT_RANK() OVER (ORDER BY total)
Ang bahagi ng mga row na nasa kasalukuyang row o bago pa dito, mula 1/n hanggang 1.
CUME_DIST() OVER (ORDER BY total)
Ang OVER clause
Tumutukoy sa window na binabasa ng bawat function.
<fn>() OVER (PARTITION BY user_id ORDER BY created_at)
Nagsisimula muli ang window para sa bawat grupo ng mga row.
PARTITION BY user_id
Nagkakasunod-sunod ang mga row sa loob ng bawat partition.
ORDER BY created_at
Naglilimita sa gumagalaw na frame, hal. mula sa preceding hanggang sa following na row.
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
Naglilimita sa frame ayon sa value, hindi sa posisyon ng row; kasama ng CURRENT ROW ang mga kaparehong tie, at ito ang default na frame sa ilalim ng ORDER BY.
RANGE BETWEEN 100 PRECEDING AND CURRENT ROW
Naglilimita sa frame ayon sa mga grupo ng magkakatugmang row mula sa ORDER BY.
GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
Inaalis ang kasalukuyang row mula sa frame; inaalis ng EXCLUDE TIES ang mga tie nito sa halip.
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING EXCLUDE CURRENT ROW
Pinangangalanan ang window nang isang beses kada query para makagamit muli nito ang ilang OVER clause.
WINDOW w AS (PARTITION BY user_id ORDER BY created_at)
Pumipitong mabuti sa mga row na binabasa ng isang window aggregate, bago ilapat ang window.
SUM(total) FILTER (WHERE status = 'paid') OVER (ORDER BY created_at)