![DENSE_RANK() 関数](/images/new-backgrounds/25485/25485183x1.webp)
統計関数
これは次の指定に相当します。
( COUNT (*) OVER ( ws RANGE UNBOUNDED PRECEDING ) - COUNT (*) OVER ( ws RANGE CURRENT ROW ) + 1 )
この RANK 関数の変換では、論理的な集合 (RANGE) を使用しています。この 結果、同位のロー ( 順序付けカラムに同じ値が含まれているロー ) が複数ある 場合は、それらに同じランクが割り当てられます。パーティション内で異なる 値を持つ次のグループには、同位のローのランクよりも 1 以上大きいランクが 割り当てられます。たとえば、順序付けカラムに 10、20、20、20、30 という値 を含むローがある場合、1 つ目のローのランクは 1 になり、2 つ目のローのラン クは 2 になります。3 つ目と 4 つ目のローのランクも 2 になりますが、5 つ目の ローのランクは 5 になります。ランクが 3 または 4 のローは存在しません。こ のアルゴリズムは非連続型ランキング (sparse ranking) とも呼ばれます。
『Sybase IQ リファレンス・マニュアル』の「第 5 章 SQL 関数」の「RANK 関 数 [ 統計 ]」も参照してください。
DENSE_RANK() 関数
RANK 関数は同位のローがあるときに重複したランク値を割り当て非連続的 なランキングを返しますが、DENSE_RANK 関数は抜けのないランキングを返 します。同位のローに対しては同じように等しいランク値が割り当てられます が、このローのランクは、個々のローの順位ではなく、順序付けカラムに等し い値を含んでいるローの集まりの順位を表しています。RANK の例と同様に、 順序付けカラムに 10、20、20、20、30 という値を含むローがある場合、1 つ 目のローのランクは同じく 1 となり、2 つ目のローおよび 3 つ目、4 つ目のロー のランクも同じく 2 となります。しかし、最後のローのランクは 5 ではなく 3 になります。
DENSE_RANK も、構文変換を通じて計算されます。
DENSE_RANK() OVER ws
これは次の指定に相当します。
COUNT ( DISTINCT ROW ( expr_1, . . ., expr_n ) )
OVER ( ws RANGE UNBOUNDED PRECEDING )
この例では、expr_1 から expr_n の部分が、ウィンドウ w1 のソート指定リスト に含まれている値の式のリストを表しています。
『Sybase IQ リファレンス・マニュアル』の「第 5 章 SQL 関数」の「DENSE_RANK 関数 [ 統計 ]」も参照してください。
76 | Sybase IQ |