从左边的 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
您在最终查询中包含的逻辑比此处包含的要多得多,但希望它能帮助您入门。