【发布时间】:2015-07-26 14:46:17
【问题描述】:
我有两个名为 charges 和 orders 的 postgresql 表。我正在尝试创建一个matview,其中包含多少收费变成订单的数据,并且它是值得的。两个表没有直接关系,下面是两者的表结构
收费 |日期 |交易ID |金额 | |--------|----|--------| | 4 月 23 日 | abcdef | 36 | | 4 月 23 日 | fghijkl | 198 | | 4 月 24 日 | yyyyyy | 200 | 订单 |日期 | order_id | |--------|----------| | 4 月 23 日 | abcdef | | 4 月 23 日 | abcdef | | 4 月 24 日 | yyyyyy |
下面是我用来生成 matview 的查询,
CREATE MATERIALIZED VIEW sales AS
SELECT ch.date AS date,
(ord.id IS NOT NULL) as placed_order,
COUNT(DISTINCT(ch.transaction_id)) AS attempts,
SUM(ch.amount) AS amount
FROM charges ch
LEFT OUTER JOIN orders as ord ON ch.transaction_id = ord.order_id
GROUP BY ch.date
该问题是由视图中生成的Amount 列引起的。由于orders表重复,左外连接时返回多行charges,数量基本在增加。
有没有办法在自己加入时从订单中Distinctorder_id 列?
或者有没有办法区分order_id 并在查询本身时对金额求和?我尝试了子查询和自加入,但没有运气。
【问题讨论】:
标签: postgresql join postgresql-9.3 materialized-views