始める無料で始める

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;
コードを編集して実行