1

SQL 似乎比我预期的要复杂。我的问题:对于每个客户,我想显示客户 ID 和 2011 年的订单总数。

我的桌子看起来像这样

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

感谢您的帮助,但我也想了解我的逻辑问题出在哪里。我似乎不明白哪个关键部分?

4

2 回答 2

2

你的逻辑问题是这样的

GROUP BY Order_ID, Customer_ID

这意味着 (Order_ID, Customer_ID) 的每个组合都放在不同的 GROUP 中。由于 Order_ID 单独是唯一的,因此实际上不会发生分组。

要正确执行此操作,您需要按 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
于 2012-10-25T01:09:48.563 回答
0

count()改为使用

SELECT Customer_ID, COUNT(Order_ID) AS Orders_Placed
FROM Order_t
GROUP BY Customer_ID
于 2012-10-25T01:06:02.123 回答