2016-02-28 33 views
2

我正試圖在SQL語句中計算。我正在計算每個客戶的invoice.total列中的總金額。我創建了以下聲明:使用內部連接在SQL中計算

SELECT customers.firstname, customers.lastname, customers.status, SUM(invoice.total) AS total 
FROM customers 
INNER JOIN invoice 
ON customers.id=invoice.id; 

當我運行這個時,我得到了表中的總金額。我在這個表中有15個不同的客戶,但我只獲得第一個客戶的名稱和所有客戶的總數。我究竟做錯了什麼?

回答

2

首先,當您想擁有彙總結果需要組數據:

SELECT customers.firstname, customers.lastname, customers.status, SUM(invoice.total) AS total 
FROM customers 
INNER JOIN invoice 
    ON customers.id=invoice.id 
GROUP BY customers.firstname, customers.lastname, customers.status; 

其次,你確定你是正確的字段加入表? invoice.id正確的列?我期望invoice.id是表的主鍵,而我希望另一列爲外鍵,例如invoice.customerid。請仔細檢查它是否正確。

更新:正如在評論中提到,如果您有兩個客戶相同的姓,名和狀態,數據會被錯誤地分組。在這種情況下,您需要向SELECTGROUP BY聲明添加唯一字段(例如customers.id)。

+0

如果有兩個客戶具有相同名字的姓和狀態,那麼它將聚集他們。必須有一些獨特的專欄來分組,因此我的建議是先由ID分組。 –

+0

@JakubSzumiato感謝您的注意和指出。我更新了答案 – dotnetom

2

你必須通過客戶(id屬性爲例)添加一個組。如果你想在選擇中有姓和名,那麼你將不得不由他們分組。

1

使用group by子句在您的查詢,也可以使用公用表表達式來獲得由客戶記錄的總和,然後作出一個內部客戶表連接。

1

您需要在您的查詢添加一組由列名。

+0

您能否擴展這一點,幫助向OP(以及其他偶然/未來的讀者)解釋爲什麼使用「GROUP BY」可以幫助解決他們的問題? – Castaglia