【发布时间】:2019-07-25 09:22:29
【问题描述】:
我正在尝试发出会产生一些 SUM 和 COUNT 的请求。但是由于重复的内部连接行,一些 SUM 行是错误的。我尝试了很多想法,但目前没有一个可行。
使用 INNER JOIN,当我在 invoiceRow 或 invoicePayment 上有多行时,发票行的总和为假(例如:如果我在 invoiceRow 上有 4 行,我将 Sum(invoice) 乘以 4)。
发票
id
customer
repertory
subTotal
totalPaid
客户
id
name
发票
id
invoice
type
发票付款
id
invoice
method
amount
如果有人可以帮助我,在此先感谢。
我已经尝试了一些SUM(DISTINCT),但它并没有像我想要的那样工作。
内连接的sql结果
SELECT DATE(i.endDate),
c.currency,
ir.type,
ip.method,
AVG(i.totalPaid),
COUNT(DISTINCT i.repertory),
COUNT(DISTINCT i.id),
SUM(i.subTotal),
SUM(i.totalPaid)
from invoice i
INNER JOIN invoiceRow ir ON ir.invoice=i.id
INNER JOIN invoicePayment ip ON ir.invoice=ip.invoice
INNER JOIN customer c ON c.id=i.customer
where i.customer=21 and i.totalPaid is not null and ip.method IN (3)
GROUP BY DATE(i.endDate);
没有内部连接的结果
SELECT DATE(i.endDate),
c.currency,
AVG(i.totalPaid),
COUNT(DISTINCT i.repertory),
COUNT(DISTINCT i.id),
SUM(i.subTotal),
SUM(i.totalPaid)
from invoice i
INNER JOIN invoiceRow ir ON ir.invoice=i.id
INNER JOIN invoicePayment ip ON ir.invoice=ip.invoice
INNER JOIN customer c ON c.id=i.customer
where i.customer=21 and i.totalPaid is not null
GROUP BY DATE(i.endDate);
【问题讨论】: