2014-02-19 146 views
0

想知道你是否可以帮我解决SQL问题。SQL 3 - 表查询

表的例子,请ingore缺乏关系只是一个例子。

http://postimg.org/image/5imvjgl0t/

右键所以基本上我想所有的客户ID具有一定的COUNTRYCODE相关的我可以通过对客户表做一个简单的查询,但我然后需要找出客户有多少形式有在订单表中提交。

然后,我需要获取仓库的标题(每个国家代码一个仓库)以及与提交表单的仓库相关联的客户数量。

所以总而言之,我需要从Customer表中获取customerID的列表并计算它们在Order表中显示的次数。根据订单数量将它们分类到仓库中。

最简单的方法是什么?

P.S.请忽略上面图片中的任何数据类型/关系问题,这仅仅是一个例子。

+0

您可能想要提供一些示例数据和所需的结果,而不是链接到没有人可以测试或验证结果是否正确的图像。 http://sqlfiddle.com/非常适合设置测试,但样本数据和期望的结果应该成为未来访问者有类似问题的参考。 –

回答

0
SELECT w.title, c.CustomerID, COUNT(o.form_id) as cnt 
    FROM warehouse w 
    JOIN customer c USING (countrycode) 
    JOIN `Order` o USING (CustomerID) 
    GROUP BY w.siteid, c.CustomerID 
    ORDER BY w.title ASC, c.CustomerID 

编辑

如果要包括客户没有任何订单,则需要一个LEFT JOIN Customers表:

SELECT w.title, c.CustomerID, COUNT(o.form_id) as cnt 
    FROM warehouse w 
    JOIN customer c USING (countrycode) 
    LEFT JOIN `Order` o USING (CustomerID) 
    GROUP BY w.countrycode, c.CustomerID 
    ORDER BY w.title ASC, c.CustomerID 

若要筛选,只有一个客户:

SELECT w.title, c.CustomerID, COUNT(o.form_id) as cnt 
    FROM warehouse w 
    JOIN customer c USING (countrycode) 
    LEFT JOIN `Order` o USING (CustomerID) 
    WHERE c.CustomerId = 2 
    GROUP BY w.countrycode, c.CustomerID 
    ORDER BY w.title ASC, c.CustomerID 
+0

看起来不错,我会在哪里放置WHERE语句?我尝试将它放入JOIN中,但没有奏效。我有'WHERE o.CustomerID =“001”' – user3329963

+0

您可能需要转义表顺序的名称,因为它是一个保留字,否则它应该没问题。 WHERE应该在JOINS之后并在GROUP BY之前 – fejese

+0

btw这里是我用过的sqlfiddler实例:http://sqlfiddle.com/#!2/39509/7 – fejese