2016-12-22 59 views
0

這裏是我的表:有沒有辦法在MySQL中求和兩列的乘積?

-- receipts 
| id | date  | 
|----|------------| 
| 1 | 2016-12-20 | 
| 2 | 2016-12-20 | 
| 3 | 2016-12-21 | 

-- purchases 
| id | receipt_id | item  | price | tax_rate | 
|----|------------|-------------|-------|----------| 
| 1 | 1   | apples  | 3.89 | 0.000 | 
| 2 | 1   | canned soup | 2.99 | 0.095 | 
| 3 | 1   | candy bar | 0.99 | 0.095 | 
| 4 | 2   | gas   | 26.78 | 0.000 | 
| 5 | 3   | chips  | 3.99 | 0.095 | 
| 6 | 3   | dip   | 2.99 | 0.095 | 

我試圖做到這一點與小計,稅金總額,以及總計返回從收益表中的3項的查詢。這是我到目前爲止對SQL所具有的。

SELECT 
    receipts.id, 
    receipts.date, 
    SUM(purchases.price) AS subtotal, 
    SUM(purchases.price * purchases.tax_rate) AS tax, 
    SUM(subtotal + tax_rate) 
FROM receipts 
RIGHT JOIN purchases ON purchases.receipt_id = receipts.id; 

最終的結果應該是這樣的:

| id | date  | subtotal | tax | total | 
|----|------------|----------|------|-------| 
| 1 | 2016-12-20 | 7.87 | 0.38 | 8.25 | 
| 2 | 2016-12-20 | 26.78 | 0.00 | 26.78 | 
| 3 | 2016-12-21 | 6.98 | 0.66 | 7.64 | 
+1

你有什麼問題? – shmosel

+0

'SUM(小計+稅)'給我和錯誤,說'未知列'小計'在'字段列表'如果我刪除那一個我得到我沒有得到任何錯誤,但它只是返回第一行並將整個列彙總到該行中。 – MakPo

+0

您不能在同一查詢中引用字段別名。您需要將其放入子查詢中,或重複計算該別名。 – Barmar

回答

1

這看起來像一個INNER JOIN的情況下,你需要GROUP BY receipt_id 。其餘的看起來很好,除了什麼shmosel已經回答。

SELECT 
    receipts.id, 
    receipts.date, 
    SUM(purchases.price) AS subtotal, 
    SUM(purchases.price * purchases.tax) AS tax, 
    SUM(purchases.price) + SUM(purchases.price * purchases.tax) AS total 
FROM receipts 
INNER JOIN purchases ON purchases.receipt_id = receipts.id 
GROUP BY receipt_id 

是mysql不知道產生的別名,你需要編寫每個SELECT子句中的計算選擇,並希望MySQL的處理是正確的,不計算兩次一切。

+0

'INNER JOIN'工作,但它也適用於'RIGHT JOIN'。但不使用別名,並通過讓它工作來添加組。 – MakPo

+0

INNER JOIN是您正在尋找的內容,因爲如果您使用RIGHT JOIN並在程序中進一步處理數據,將導致錯誤。通常,沒有購買就不能有收據,反之亦然。 INNER JOIN只查找「有效」條目,既有收據又有購買。 @MakPo – baao

+0

@baao - 正如現在寫的,你的SQL語句是無效的,因爲你既沒有按照收據日期彙總也沒有分組。 [Caleb Haldane的回答](https://stackoverflow.com/a/41292360/1429354)更準確,更好地解釋了彙總數據的要求。 –

1

第三SELECT值應該是

SUM(purchases.price) + SUM(purchases.price * purchases.tax) AS total 
2

你快到了。由於您想彙總結果,因此需要使用匯總函數SUM(您已完成),但是當您使用SUM時,需要告訴查詢如何彙總數據。您可以通過按語句添加分組來完成此操作。

SELECT 
    receipts.id, 
    receipts.date, 
    SUM(purchases.price) AS subtotal, 
    SUM(purchases.price * purchases.tax) AS tax, 
    SUM(purchases.price) + SUM(purchases.price * purchases.tax) AS total 
FROM receipts 
RIGHT JOIN purchases ON purchases.receipt_id = receipts.id; 
GROUP BY receipts.id, receipts.date 
相關問題