[英]Using a Join with Grouped Data Rows
我有两个表, invoices
和deposits
。
他们看起来像这样:
发票
id | paymentType | grossTotal | dateTime
1 | Cash | 1000 | UNIX TIME
2 | Card | 1350 | UNIX TIME
3 | Card | 1250 | UNIX TIME
4 | Card | 750 | UNIX TIME
押金
id | paymentType | invNo | dateTime | amount
1 | Cash | 1 | UNIX TIME | 150
2 | Card | 2 | UNIX TIME | 350
存款始终是过去日期,发票日期将是例如today
,因此我想确定今天在发票上支付的余额,即invoices.grossTotal - deposits.amount
,并按付款类型列出。
因此,在上面的表格示例中,本应在发票1上支付850英镑,在发票2上支付1000英镑,这很容易做到,每行一两行,但是在将付款类型和存款发票分组时, ...
SELECT
invoices.id,
sum(grossTotal)-IFNULL(depositsCheck.previouslyPaid,0) as todayTotal,
depositsCheck.previouslyPaid, sum(grossTotal) as grossTotal
FROM `invoices`
LEFT JOIN (SELECT SUM(amount) as previouslyPaid, invNo
FROM deposits
GROUP BY invNo) depositsCheck ON depositsCheck.invNo=invoices.id
GROUP BY invoices.paymentType ORDER BY id DESC
SQL查询以上,将用于支付与现金项目工作,而不是为卡支付,因为,分组invoices.paymentType
意味着该id
从柱invoices
表不再是正确的,所以JOIN
如果此行有失败与存款无关的id
。
如何运行上述查询,但要确保我可以将发票上的deposits
表join
deposits
表,并按与分组的列ID记录匹配的付款类型分组?
我正在使用mySql,因此请发布MySql可以做到的联接! :D
问题是,当您使用GROUP BY
,只能SELECT
聚合和已分组的列。
invoices.id
是您尝试选择但未分组的列。 我认为您可能想将此列添加到GROUP BY
子句中。
SELECT
invoices.id,
sum(grossTotal)-IFNULL(depositsCheck.previouslyPaid,0) as todayTotal,
depositsCheck.previouslyPaid, sum(grossTotal) as grossTotal
FROM `invoices`
LEFT JOIN (SELECT SUM(amount) as previouslyPaid, invNo
FROM deposits
GROUP BY invNo) depositsCheck ON depositsCheck.invNo=invoices.id
GROUP BY invoices.paymentType, invoices.id ORDER BY id DESC
对于您提供的示例表,它可能会给出:
id | paymentType | grossTotal | dateTime | previouslyPaid
1 | Cash | 1000 | UNIX TIME | 150
2 | Card | 1350 | UNIX TIME | 350
3 | Card | 1250 | UNIX TIME | 0
4 | Card | 750 | UNIX TIME | 0
但总的来说,您将拥有类似以下内容:
id | paymentType | grossTotal | dateTime | previouslyPaid
1 | Cash | 1000 | UNIX TIME | 150
1 | Card | 1000 | UNIX TIME | 300
2 | Cash | 1350 | UNIX TIME | 350
2 | Card | 1350 | UNIX TIME | 350
如上图所示,对于发票1,以现金支付了150,用卡支付了300。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.