例: 複数レベルの集約を実行するための派生テーブルの使用 - Teradata Database - Teradata Vantage NewSQL Engine - 例: 複数レベルの集約を実行するための派生テーブルの使用

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/fbo1512081269404.ditamap
dita:ditavalPath
ja-JP/fbo1512081269404.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

WHERE句の述部で集約を指定することはできません。派生テーブルでは、そのような計算を簡単に実行することができます。

次の例で、派生テーブルがどのようにこれを行なうかを示します。

この例では、WHERE条件は、基本テーブルemployeeの行の値を、派生テーブルworkersの列average_salaryの値(この場合は単一の値)と比較しています。

     SELECT name, salary, average_salary
     FROM (SELECT AVG(salary)
           FROM employee) AS workers (average_salary), employee
     WHERE salary > average_salary
     ORDER BY salary DESC;

この問合わせは、以下のような応答セットを返します。

名前 salary average_salary
Russel S 55,000.00 38,147.62
Watson L 56,000.00 38,147.62
Phan A 55,000.00 38,147.62
Aguilar J 45,000.00 38,147.62
Carter J 44,000.00 38,147.62

以下のそれよりも複雑な例では、同じ情報をdept_no別にグループに分けています。この例では、文はそれぞれの部門の平均を上回るすべての給与を返します。

この例では、派生テーブルは、一連の行を提供する「グループ テーブル」です。外側のWHERE句では、基本テーブルemployeeと派生テーブルの部門番号(dept_no)の間に等価結合があります。

     SELECT name, salary, dept_no, average_salary
     FROM (SELECT AVG(salary), dept_no
           FROM employee
           GROUP BY dept_no) AS workers (average_salary,dept_num),
                               employee
     WHERE salary > average_salary
     AND   dept_num = dept_no
     ORDER BY dept_no, salary DESC;

応答セットは次のようになります。

name salary dept_no average_salary
Chin M 38,000.00 100 32,625.00
Moffit H 35,000.00 100 32,625,00
Russel S 55,000.00 300 47,666.67
Phan A 55,000.00 300 47,666.67
Watson L 56,000.00 500 38,285.71
Carter J 44,000.00 500 38,385.71
Smith T 42,000.00 500 38,285.71
Aguilar J 45,000.00 600 36,650.00