【发布时间】:2014-11-19 08:09:41
【问题描述】:
考虑两个表:
CREATE TABLE sales (
saleid INT,
saledateid INT,
saleamount DECIMAL(12,2)
);
CREATE TABLE salelines (
salelineid INT,
saleid INT,
quantity INT,
unitamount DECIMAL(12,2)
);
如果我想计算每天的总销售额:
SELECT sum(quantity * unitamount)
FROM sales
JOIN salelines USING (saleid)
GROUP BY saledateid;
在大多数情况下,sales.saleamount 是该销售的销售线的总和。但在某些情况下,saleamount 会被调整,这就是我们单独存储它的原因。所以每天的实际总销售额为:
SELECT sum(saleamount)
FROM sales
GROUP BY saledateid;
但是,对于物化视图,我需要在同一个查询中同时使用这两种方法,以下方法不起作用,因为销售可能由多条销售线组成。
SELECT sum(quantity * unitamount), sum(saleamount)
FROM sales
JOIN salelines USING (saleid)
GROUP BY saledateid;
我该怎么做?我正在使用 PostgreSQL,但我更喜欢符合 SQL 的解决方案。
【问题讨论】:
标签: sql postgresql