【发布时间】:2017-07-06 18:36:48
【问题描述】:
我有以下查询,它试图生成所有客户、他们的项目、每个项目花费的时间、发票总额和发票总数的列表。
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 的总和/计数并没有根据上下文加入到项目中,而是加入到表中的发票总数中。如果我注释掉 sum() 中的一个,那么我会得到正确的值,但当它们都在时不会。
预期结果
客户 A,项目 1, 1000, $10,000, 2
客户 A,项目 2,5000,5000 美元,1
客户 B,项目 1,100,3000 美元,1
实际结果
客户 A,项目 1, 1000, $150,000, 20
客户 A,项目 2, 5000, $50,000, 81
客户 B,项目 1, 100, $83000, 12
我尝试过使用 grouping 和 join 语句,但没有成功。有什么简单的我忽略了还是需要完全重写?
【问题讨论】:
-
帮帮我,我大大缩小了这个查询。您还希望看到什么?
-
当两个总和不正确时,与取出一个时的值有何不同?正确的值是高于还是低于错误的值?
-
我以为我刚刚做到了