Postgres无法弄清楚复杂的查询

时间:2016-01-09 03:17:57

标签: sql postgresql

我需要一些非常复杂的查询帮助。我正在使用postgresql。这是我需要的最终结果: - group by company.id - 由mailers.mail_date分组 - 计算邮件 - 计算客户订单 - 计算付款 - 显示是否有客户订单 - Sum payments.payment_amt - Sum clearinghouse_orders.remit

我不知道如何嵌入表格,如下图所示:

enter image description here

非常感谢任何帮助。我是个新手。

以下是我要完成的工作除了我需要对公司进行分组,以便首先按公司分组结果然后分组Mail_date

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

从图表左侧的3个表开始,您可以像这样加入它们

select *
from companies 
inner join dbas ON companies.id = dbas.company_id
inner join mailers ON dbas.id = mailers.dba_id

获取“结果首先按公司分组,然后Mail_date ”将“GROUP BY”子句添加到列出这些列的查询中,并将这些列包括在ELECT子句中。

SELECT
  companies.id, companies.name, mailers.mail_date
from companies 
inner join dbas ON companies.id = dbas.company_id
inner join mailers ON dbas.id = mailers.dba_id
GROUP BY
  companies.id, companies.name, mailers.mail_date

现在当它归结为付款时(例如),事情可能会变得棘手,因为你想要准确地得出这些东西。如果不是所有公司都有订单,你现在需要使用LEFT JOIN,并且为了计算付款总额,我建议你在加入其他表之前做这些总和,如下:

SELECT
  companies.id, companies.name, mailers.mail_date, SUM(p.payment_amt)
from companies 
inner join dbas ON companies.id = dbas.company_id
inner join mailers ON dbas.id = mailers.dba_id

left join customer_orders ON dbas.id = customer_orders.dba_id
left join (
           select customer_order_id, SUM(payment_amt) as payment_amt
           from payments
           group by customer_order_id
          ) p on customer_orders.id = p.customer_order_id
GROUP BY
  companies.id, companies.name, mailers.mail_date

您在最终查询中包含的逻辑要多于此处所包含的逻辑,但希望它能帮助您入门。