[英]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.