考虑以下查询,其中聚合发生在两个表中: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 上运行解释,内部查询本身花费的时间非常少,但连接需要很长时间。
- 假设 article_id 上的主键存在并且两个表都按年份分区。
- 左外连接,因为第二个表包含可选数据。
那么,您能否建议一种更好的方法来编写此查询。感谢您阅读本文:)