17.00 - 17.05 - 問合わせの例 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

dense_rank UDFは、このUDFの引数として渡された値のセット全体に対して、dense_rankを評価します。dense_rankでは、複数の項目の比較が等しい場合には、それらに同一のランク番号を与えます。それに続く項目には、そのランク番号の直後の番号を与えます。

次のテーブルの定義と挿入されたデータについて考えてみます。

CREATE MULTISET TABLE t
   (id INTEGER,
    v  INTEGER);

INSERT INTO t VALUES (1,1);
INSERT INTO t VALUES (1,2);
INSERT INTO t VALUES (1,2);
INSERT INTO t VALUES (1,4);
INSERT INTO t VALUES (1,5);
INSERT INTO t VALUES (1,5);
INSERT INTO t VALUES (1,5);
INSERT INTO t VALUES (1,8);
INSERT INTO t VALUES (1,);

次に示す問合わせと結果では、rankとdense_rankのv=4に対する値に注目してください。dense_rankの値は4なのに対して、rankの4は5になります。

SELECT v, dense_rank(v) OVER (PARTITION BY id ORDER BY v
   ROWS UNBOUNDED PRECEDING) as dr,
   rank() OVER (PARTITION BY id ORDER BY v) as r
FROM t ORDER BY dr;

このSELECT文の出力は、次のとおりです。

          v           dr            r
-----------  -----------  -----------
          ?            1            1
          1            2            2
          2            3            3
          2            3            3
          4            4            5 
          5            5            6
          5            5            6
          5            5            6
          8            6            9