我创建了一个查询,该查询可以返回具有 YTD、去年、前一年和前一年的不同列的特定组的所有收入。
它的工作原理非常缓慢,而且由于我使用的子查询,我可以告诉它。我最近开始了一份新工作,以前在 MSSQL 上使用子查询不是问题,对性能几乎没有影响,但我想知道这是否是 Postgres 的问题?
我在我运行的最后一个查询中限制了 10 行,并且花了 3 分钟才恢复 10 行。
代码:
SELECT
g.id,
COALESCE(g.description, '') AS description,
(select sum(d.total) from ainvdet d inner join ainvhead h USING (ainvheadid) where d.product_group = g.id and date_part('year', h.order_date) = date_part('year', current_date)) as salesytd,
(select sum(d.total) from ainvdet d inner join ainvhead h USING (ainvheadid) where d.product_group = g.id and date_part('year', h.order_date) = date_part('year', current_date)-1) as salesytd1,
(select sum(d.total) from ainvdet d inner join ainvhead h USING (ainvheadid) where d.product_group = g.id and date_part('year', h.order_date) = date_part('year', current_date)-2) as salesytd2,
(select sum(d.total) from ainvdet d inner join ainvhead h USING (ainvheadid) where d.product_group = g.id and date_part('year', h.order_date) = date_part('year', current_date)-3) as salesytd3
FROM grpdesc g
WHERE g.company = 1 AND g.record_type = 'G'
GROUP BY g.id, g.description