2つのテーブル間で集計が行われる次のクエリについて考えてみます。SalesとPromo、および集計値が計算で再び使用されます。
SELECT
sales.article_id,
avg((sales.euro_value - ZEROIFNULL(promo.euro_value)) / NULLIFZERO(sales.qty - ZEROIFNULL(promo.qty)))
FROM
( SELECT
sales.article_id,
sum(sales.euro_value),
sum(sales.qty)
from SALES_TABLE sales
where year >= 2011
group by article_id
) sales
LEFT OUTER JOIN
( SELECT
promo.article_id,
sum(promo.euro_value),
sum(promo.qty)
from PROMOTION_TABLE promo
where year >= 2011
group by article_id
) promo
ON sales.article_id = promo.article_id
GROUP BY sales.article_id;
クエリに関する注意事項:
- 記事の数が多いため、両方の内部クエリは膨大な数の行を返します。teradataでexplainを実行すると、内部クエリ自体にかかる時間は非常に短くなりますが、結合には長い時間がかかります。
- article_idの主キーが存在し、両方のテーブルが年ごとにパーティション化されていると想定します。
- 2番目のテーブルにオプションのデータが含まれているため、左外部結合。
それで、このクエリを書くためのより良い方法を提案できますか?ここまで読んでくれてありがとう:)