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

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/qwr1571437338192.ditamap
dita:ditavalPath
ja-JP/qwr1571437338192.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

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