2017-04-18 28 views
1

お客様の注文総数、注文総額、平均注文額、およびメールアドレスを取得する必要があります。どこから〜日付と国私はwhere句で述べた。 これは私のテーブルです。 [Sell-to Customer No_]は顧客IDです。注文総額、合計金額、AOV

SELECT 

    [Sell-to Customer No_] 
    ,[Bill-to Name] 
    ,[Order Date] 
    ,[Amount] 
    ,[Original Order No_] 
    ,[Country] 
    ,[Email] 
    FROM [TBW_BI].[dbo].[Dreams$Internet Orders] 
    WHERE [Country]='RUSSIA' and 
    [order date] >= '2016-11-18T00:00:00.000' AND 
    [order date] <= '2017-04-10T00:00:00.000' 
+0

ヒント: 'COUNT()'、 'SUMを() '、' AVG() ')を呼び出します。 –

+1

@ Giridhar、何を試しました..? – Mansoor

+0

私はcount()とsum()を試しましたが、私はSQLの新しいビットに混乱しています。 – jiroe

答えて

0

を使用できる値をグループ化からのメール。テーブルへの参照とWHERE句で何が起こっているのかを理解しているとすれば、集計関数とGROUP BYについてだけ説明します。

集計は、グループ化する前に、クエリのすべての行に適用されるかなり簡単な関数です。つまり、次のようなクエリを書くと、

SELECT count(*) FROM MyTable 

集計関数は、テーブルのすべての行を数えます。 sum,avgはまた、凝集体である。テーブル内のさまざまなサブセットの数を確認するには、GROUP BY修飾子を指定する必要があります。これにより、電子メールごとの行数がカウントされます。

SELECT email, count(*) FROM MyTable GROUP BY email 

SELECTとGROUP BYの電子メールを明示的に参照する必要があることに注意してください。

質問に答えるには、このようなクエリが必要だと思います。

SELECT 
    [Email] 
    , COUNT(*)    AS order_count 
    , SUM([Amount])   AS total_amount 
    , AVG([Amount])   AS avg_amount 
FROM 
    [TBW_BI].[dbo].[Dreams$Internet Orders] 
WHERE 
    [Country]='RUSSIA' 
    AND [order date] >= '2016-11-18T00:00:00.000' 
    AND [order date] <= '2017-04-10T00:00:00.000' 
GROUP BY 
    [Email] 

集計の前にWHEREが適用されていることに注意するだけで、グループ化された結果をフィルタリングすることはできません。あなたが2つの以上の注文を持っていた電子メールに至るまで、フィルタのような何かを行うために必要な場合には、そのようなクエリの一番最後にHAVING句を追加します。

... 
HAVING 
    count(*) >= 2 
0

SELECT 

    [Sell-to Customer No_] 
    ,Count(*) 
    ,Sum([Amount]) 
    ,AVG([Amount]) 
    FROM [TBW_BI].[dbo].[Dreams$Internet Orders] 
    WHERE [Country]='RUSSIA' and 
    [order date] >= '2016-11-18T00:00:00.000' AND 
    [order date] <= '2017-04-10T00:00:00.000' 
group by [Sell-to Customer No_] 

それを試してみて、あなたが他の列をしたい場合はまず、最大、合計経由で取得してください....機能すべての顧客は、1通の電子メールを持っている場合、あなたのrequierment

に依存あなたのグループ化値にこのような列を追加することができます

SELECT 

     [Sell-to Customer No_] 
     ,[Email] 
     ,Count(*) 
     ,Sum([Amount]) 
     ,AVG([Amount]) 
     FROM [TBW_BI].[dbo].[Dreams$Internet Orders] 
     WHERE [Country]='RUSSIA' and 
     [order date] >= '2016-11-18T00:00:00.000' AND 
     [order date] <= '2017-04-10T00:00:00.000' 
    group by [Sell-to Customer No_], [Email] 

いいえ、あなたが最初に表示したい場合あなたはのは、SQL集計で何が起こっているかを見ていきましょうfirst_value

このような
SELECT 

     [Sell-to Customer No_] 
     ,FIRST_VALUE([Email]) over (partition by [Sell-to Customer No_] order by [Sell-to Customer No_]) as Email 
     ,Count(*) 
     ,Sum([Amount]) 
     ,AVG([Amount]) 
     FROM [TBW_BI].[dbo].[Dreams$Internet Orders] 
     WHERE [Country]='RUSSIA' and 
     [order date] >= '2016-11-18T00:00:00.000' AND 
     [order date] <= '2017-04-10T00:00:00.000' 
    group by [Sell-to Customer No_] 
+0

結果にもメールを送信する方法を教えてください。 – jiroe

+0

、それは動作しているが、私は結果だけでも電子メールを取得する必要があります。 – jiroe

+0

私に1分を与える – Vecchiasignora

関連する問題