17.05 - 例: 複数レベルの集約での派生テーブルの使用 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

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

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