2013-03-01 42 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)

几乎肯定不是很正确,但在某个地方接近。

相关问题