SQL似乎比我预期的更复杂。我的问题:对于每个客户,我想显示2011年的客户ID和订单总数。
我的表格看起来像这样
Table: Order_t
Order_ID Order_Date Customer_ID
-------- ---------- -----------
1001 10/21/2011 1
1002 10/25/2011 8
1003 10/26/2011 15
1004 10/27/2011 5
1005 11/24/2011 3
1006 11/27/2011 2
1007 11/28/2011 11
1008 12/3/2011 12
1009 12/5/2011 1
1010 1/16/2012 4
我希望我的查询显示如下表:
Customer_ID Orders_Placed
----------- -------------
1 2
2 1
3 1
5 1
8 1
11 1
12 1
15 1
我当前的查询是这个(我目前完全忽略了Date部分,因为我还没有想出分组:
SELECT Customer_ID, SUM(Order_ID) AS Orders_Placed
FROM Order_t
GROUP BY Order_ID, Customer_ID
这是我明显错误的查询:
Customer_ID Orders_Placed
----------- -------------
1 1001
8 1002
15 1003
5 1004
3 1005
2 1006
11 1007
12 1008
1 1009
4 1010
感谢您的帮助,但我也想了解问题在于我的逻辑。我似乎不明白哪个关键部分?
答案 0 :(得分:1)
你的逻辑问题是这个
GROUP BY Order_ID, Customer_ID
这意味着(Order_ID,Customer_ID)的每个组合都放在不同的GROUP中。由于Order_ID本身是唯一的,因此实际上没有发生分组。
要正确地执行此操作,您需要GROUP BY Customer_ID(它看起来像您需要的,不是它),然后是COUNT
订单。最后,还要添加日期过滤器。
SELECT Customer_ID, COUNT(Order_ID) AS Orders_Placed
FROM Order_t
WHERE Order_Date >= #1/1/2011# and Order_Date < #1/1/2012#
GROUP BY Customer_ID
答案 1 :(得分:0)
使用count()
代替
SELECT Customer_ID, COUNT(Order_ID) AS Orders_Placed
FROM Order_t
GROUP BY Customer_ID