ROW_NUMBER()、RANK()、DENSE_RANK() の違いを比較する
順位付けのウィンドウ関数の中では、ROW_NUMBER() が最も一般的で、次に RANK() と DENSE_RANK() が続きます。これらの順位付け関数(および NTILE())は、SQL Server でレコードに順位を付ける異なる方法を提供します。
この演習では、データセットでインシデントタイプ3がどの程度の頻度で見られるかを確認します。インシデント数を降順で並べ替え、最もインシデント数が多い日付の行番号、ランク、Dense Rank が 1 になるようにします。わかりやすくするため、インシデント数が少なくとも 8 件ある日付のみに絞り込みます。
この演習はコースの一部です
SQL Serverで学ぶ時系列分析
演習の手順
- 列のエイリアスに基づいて、それぞれのウィンドウ関数を入力してください。
ROW_NUMBER()、RANK()、DENSE_RANK()をそれぞれ1回ずつ使用します。 OVER句では、ir.NumberOfIncidentsを降順で並べ替えるように指定してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
SELECT
ir.IncidentDate,
ir.NumberOfIncidents,
-- Fill in each window function and ordering
-- Note that all of these are in descending order!
___() OVER (___ ___ ir.NumberOfIncidents ___) AS rownum,
___() OVER (___ ___ ir.NumberOfIncidents ___) AS rk,
___() OVER (___ ___ ir.NumberOfIncidents ___) AS dr
FROM dbo.IncidentRollup ir
WHERE
ir.IncidentTypeID = 3
AND ir.NumberOfIncidents >= 8
ORDER BY
ir.NumberOfIncidents DESC;