2012-07-11 40 views
2

假设我有两个表:如何选择表和统计等表

客户

Name | id | 
------------------- 
    Benny | 1 | 
    Wilson | 2 | 
    Joe | 3 | 
    Austin | 4 | 

订单

Product | id | 
--------------------- 
    TV  | 1 | 
    Hifi-set | 1 | 
    HTPC  | 1 | 
    CD  | 1 | 
    DVD  | 1 | 
    CD  | 1 | 
    DVD  | 1 | 

这就是我想要的结果:

Name | Orders | 
------------------- 
    Benny | 7 | 
    Wilson | 0 | 
    Joe | 0 | 
    Austin | 0 | 

我不熟悉wi日SQL,但我想:

SELECT c.Name FROM Customers AS c LEFT JOIN Orders AS o ON c.id=o.id GROUP BY c.Name 

但有一个错误的结果:

Name | Orders | 
------------------- 
    Benny | 4 | 
    Wilson | 1 | 
    Joe | 1 | 
    Austin | 1 | 

我该怎么办?

+0

RobB的嵌套'SELECT's查询是完全有效的,但为了记录您的查询可能是正确的,而不是您加入客户ID以订购ID。您可能需要'C.ID = O.CustomerID'或类似的。 – 2012-07-11 23:45:16

回答

2

尝试:

select 
    c.Name, 
    (select count(1) from Orders where ID=c.ID) 
from 
    Customers as c 
+0

工作正常!谢谢! – user1510539 2012-07-11 23:45:24

+0

很高兴帮助!如果您发现它有帮助,请记住接受答案。 – RobB 2012-07-11 23:47:53

1

由于不使用SubQuery,也可以代替JOIN

SELECT a.Name, COUNT(b.id) 
FROM  Customers a LEFT JOIN Orders b 
      on a.ID = b.ID 
GROUP BY a.Name 
+1

这是比标记为已接受的更有效的解决方案。如果有一个或多个客户具有相同的名称,那么改进它的一个方法是通过'id'对'GROUP BY'进行修改。 – 2012-07-12 01:23:38