17.10 - 例: 残存カウント - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL関数、式、および述部

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1145-171K-JPN
Language
日本語 (日本)

売上げが入っていない行を含む、すべての行をカウントするには、COUNT(*)を使用します。現在行より後のパーティションに残っている行の数をカウントする例を次に示します。

   SELECT city, kind, sales, profit,
   COUNT(*) OVER (PARTITION BY city, kind ORDER BY profit DESC
                  ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
   FROM activity_month;
   
   city     kind      sales  profit  Remaining Count(*)
   -------  --------  -----  ------  ------------------
   LA       Canvas       20     120                   ?
   LA       Canvas      125     190                   1
   LA       Canvas       45     320                   2
   LA       Canvas      125     400                   3
   LA       Leather       ?       ?                   ?
   LA       Leather      20      40                   1
   Seattle  Canvas       15      30                   ?
   Seattle  Canvas       20      30                   1
   Seattle  Canvas       20     100                   2
   Seattle  Leather       ?       ?                   ?
   Seattle  Leather      35      50                   1

ウィンドウ指定で指定する並替え順序によって関数の適用対象の行の並替え順序が定義されますが、それによって結果の順序が定義されるわけではないことに注意してください。

この例では計算にはDESC並替え順序が指定されていますが、結果はその逆の順序で戻されています。

結果を順序付けするには、次のように、SELECT文でORDER BY句を使用します。

   SELECT city, kind, sales, profit,
   COUNT(*) OVER (PARTITION BY city, kind ORDER BY profit DESC
                  ROWS BETWEEN 1 FOLLOWING AND 
                  UNBOUNDED FOLLOWING)
   FROM activity_month
   ORDER BY city, kind, profit DESC;
   
   city     kind      sales  profit  Remaining Count(*)
   -------  --------  -----  ------  ------------------
   LA       Canvas      125     400                   3
   LA       Canvas       45     320                   2
   LA       Canvas      125     190                   1
   LA       Canvas       20     120                   ?
   LA       Leather      20      40                   1
   LA       Leather       ?       ?                   ?
   Seattle  Canvas       20     100                   2
   Seattle  Canvas       20      30                   1
   Seattle  Canvas       15      30                   ?
   Seattle  Leather      35      50                   1
   Seattle  Leather       ?       ?                   ?