1

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

私の現在のクエリはこれです(グループ化をまだ理解していないため、現在、日付の部分を完全に無視しています:

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)の各組み合わせが異なるグループに入れられることを意味します。Order_IDだけが一意であるため、実際にはグループ化は行われません。

これを正しく行うには、Customer_IDでGROUP BYを実行する必要があります(必要なものと同じように表示されます)。次にCOUNT、Ordersを使用します。最後に、日付フィルターも追加します。

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 に答える