我有以下查询试图生成所有客户端,他们的项目,花在每个项目上的时间,总开票金额和发票总数的列表。MySQL查询组合来自多个表的总和
SELECT
c.name as client,
p.name as project,
SUM(t.hours) as hours,
SUM(ci.amount) as invoice_amount,
COUNT(ci.id) as number_invoices
FROM
projects p
INNER JOIN client_master c ON c.harvest_id = p.client_id
INNER JOIN timesheet t ON t.project_id = p.id
LEFT OUTER JOIN projects_contracts pc ON pc.project_id = p.id
INNER JOIN contracts_invoices ci ON ci.contract_id = pc.contract_id
GROUP BY
c.name,
p.name
ORDER BY
c.name,
p.name,
t.hours
当我运行查询,在“时间”被正确地计算,但总和/对INVOICE_AMOUNT和number_invoices计数不被上下文加入到该项目,但在表发票的总数。如果我注释掉总和的一个()的话,我得到了应有的价值,但是当他们都在不。
预期结果
客户端A,项目1项,1000,$ 10,000,2
客户端A,项目2,5000,$ 5,000,1个
客户端B,项目1,100,$ 3000,1个
实效
客户端A,项目1,1000,$ 150,000,20
客户端A,项目2,5000,$ 50,000,81
客户端B,项目1,100,$ 83000,12
I”我已经尝试搞乱了分组和加入陈述,但没有找到成功。有没有简单的我可以忽略或者我需要一个完全重写?
见(HTTP [为什么要我为了什么,在我看来是一个非常简单的SQL查询提供MCVE]: //meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query) – Strawberry
帮助我在这里,我大规模缩小了这个查询。你还期望看到什么? – markjrubin
如果两个和数都存在并且不正确,那么这些值与从哪一个中取出值不同?正确的值是高于还是低于不正确的值? –