2013-03-01 43 views
4

對每一個客戶,我想回到:ID,姓名,total_orders,total_valueMySQL的 - 選擇所有客戶和每個客戶的訂單總數和總價值

客戶:

╔════╦═════════════╗ 
║ ID ║ NAME  ║ 
╠════╬═════════════╣ 
║ 1 ║ John Smith ║ 
║ 2 ║ Jim Jimmers ║ 
╚════╩═════════════╝ 

訂單:

╔═══════╦══════════╦═══════╗ 
║ ID ║ CUSTOMER ║ VALUE ║ 
╠═══════╬══════════╬═══════╣ 
║ 34656 ║  1 ║ 20 ║ 
║ 37345 ║  2 ║ 25 ║ 
║ 38220 ║  1 ║ 15 ║ 
║ 39496 ║  1 ║ 38 ║ 
║ 41752 ║  1 ║  9 ║ 
║ 43734 ║  2 ║ 20 ║ 
╚═══════╩══════════╩═══════╝ 

如何選擇喜歡的結果:

╔════╦═════════════╦═════════════╦═════════════╗ 
║ ID ║ NAME  ║ TOTALORDERS ║ TOTAL_VALUE ║ 
╠════╬═════════════╬═════════════╬═════════════╣ 
║ 1 ║ John Smith ║   4 ║   82 ║ 
║ 2 ║ Jim Jimmers ║   2 ║   45 ║ 
╚════╩═════════════╩═════════════╩═════════════╝ 

回答

7
SELECT a.ID, 
     a.Name, 
     COUNT(b.Customer) totalOrders, 
     SUM(b.value) total_value 
FROM Customers a 
     LEFT JOIN Orders b 
      ON a.ID = b.Customer 
GROUP BY a.ID, 
     a.Name 

OR

SELECT a.ID, 
     a.Name, 
     COUNT(b.Customer) totalOrders, 
     COALESCE(SUM(b.value), 0) total_value 
FROM Customers a 
     LEFT JOIN Orders b 
      ON a.ID = b.Customer 
GROUP BY a.ID, 
     a.Name 

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

結果,

╔════╦═════════════╦═════════════╦═════════════╗ 
║ ID ║ NAME  ║ TOTALORDERS ║ TOTAL_VALUE ║ 
╠════╬═════════════╬═════════════╬═════════════╣ 
║ 1 ║ John Smith ║   4 ║   82 ║ 
║ 2 ║ Jim Jimmers ║   2 ║   45 ║ 
╚════╩═════════════╩═════════════╩═════════════╝ 
+0

太快... +1;) – araknoid 2013-03-01 17:41:23

+0

這就是我已經有了。出於某種原因,我認爲這會給我所有行的SUM和COUNT。我應該更加相信我糟糕的SQL技能。 – BadHorsie 2013-03-01 17:41:47

+1

簡單明瞭。不過,COUNT並不需要成爲COALESCEd。 – 2013-03-02 11:26:17

0

這個查詢應該給你deriderated輸出:

SELECT c.id, c.name, count(*) AS total_orders, sum(o.value) AS total_value 
FROM Customers AS c 
    LEFT JOIN Orders AS o ON c.id = o.customer 
GROUP BY c.id 
0

使用內通過分組用戶ID加入再總和。

SQL連接用於通過平等點合併表,你應該給看看這個http://dev.mysql.com/doc/refman/5.0/en/join.html

對不起,我沒有一個MySQL服務器現在BU是這樣的:

選擇(選擇customers.id作爲id,customers.name作爲名稱,orders.value作爲客戶的內部連接訂單的值,從customers.id = orders.customer獲得)的id,name,sum(value)

幾乎肯定不是很正確,但在某個地方接近。

相關問題