2015-10-30 7 views
6

date、customerID、orderID、およびorderCostを一覧表示するビューがあります。 1か月あたりの最大支出顧客を選択するにはどうすればよいですか?月額最大消費者を選択する方法

SELECT EXTRACT(YEAR FROM date) AS year, MONTHNAME(date) AS month, customerID, SUM(orderCost) 
FROM CustomerPricedOrder 
GROUP BY MONTH(date), customerID; 

がCustomerPricedOrderがある*場所: データは、2015年

は私が持つ毎月、各顧客が費やしたSUMではなく、最大の支出の顧客を取得することができています年の6ヶ月の期間にまたがりますCustomerOrderという表からデータを取得するビュー

ストアドプロシージャを使用して1か月あたりの最大消費顧客を確認するにはどうすればよいですか? カーソルが必要ですか?

私がプロシージャを呼び出すとき、私は必要と出力の例:

  • 年........月.........得意先
  • 2015 ... ..... 1月....... 4
  • 2015 ........ 2月...... 21
  • 2015 ........ 3月... ...... 6
  • 2015 ........ 4月......... 11

ここで、customerIDはその月の最高の消費者です。

+1

これはよく知られた問題です。 http://stackoverflow.com/questions/tagged/greatest-n-per-group –

答えて

0

アレックス、

私の脳が正しく、これが仕事をする必要があります理解した場合は、この

SELECT EXTRACT(YEAR FROM date) AS year, MONTHNAME(date) AS month, customerID, SUM(orderCost) AS cost 
FROM CustomerPricedOrder 
GROUP BY MONTH(date), customerID ORDER BY cost DESC; 

を試してみてくださいすることができます。

3

合計降順でご注文いただけますか?

SELECT EXTRACT(YEAR FROM date) AS year, MONTHNAME(date) AS month, customerID, SUM(orderCost) as sum_of_order_cost FROM CustomerPricedOrder GROUP BY MONTH(date), customerID order by sum_of_order_cost desc limit 1; 
+0

「order by sum_of_order_cost」は無効な識別子エラーを示します。 – brenners1302

0

ここでは、変数を使用してrow_number()をシミュレートする方法を示します。クエリは最高支出顧客のために1から始まる(各グループは、月を表す)グループ内の各顧客をランク付けし、ランク1を有するものを保持します:

SELECT * FROM (
    SELECT @rn := if(@prevMonth = month AND @prevYear = year, @rn + 1, 1) rn, 
      @prevMonth := month, @prevYear := year, * 
    FROM ( 
     SELECT YEAR(date) AS year, 
      MONTHNAME(date) AS month, 
      customerID, 
      SUM(orderCost) AS sum_order_cost 
     FROM CustomerPricedOrder 
     GROUP BY MONTHNAME(date), YEAR(date), customerID 
    ) t ORDER BY year, month, sum_order_cost desc 
) t WHERE rn = 1 
0

SELECT EXTRACT(YEAR FROM date) AS year, 
MONTHNAME(date) AS month, 
customerID, 
SUM(orderCost) as sum_of_order_cost, 
MAX(sum_of_order_cost) FROM CustomerPricedOrder 
GROUP BY MONTH(date), customerID 
order by orderCost; 
....これを試してみてください
+1

@Alexander、年これは動作するはずです、試してみてください –

1
SELECT EXTRACT(YEAR FROM date) AS year, 
MONTHNAME(date) AS month, 
customerID, 
SUM(orderCost) as sum_order_cost, 
MAX(sum_of_order_cost) FROM CustomerPricedOrder 
GROUP BY MONTH(date), customerID 
order by sum_order_cost DESC 
LIMIT 1 

これは

0

分析関数

のまっすぐアプリケーションのように思えるが働くかもしれません

これは、最高額がrn -> 1に割り当てられた年/月額をランク付けします。分析関数を使用する際に知っておく必要がある一般的な質問は、「等しい結果」(つまり、期間内に同じ金額の2人の顧客)を処理する方法です。そのケースを処理する必要があるかどうか、またRow_Numberがニーズに適しているかどうかを確認します(同じ結果であっても一意の番号付けを行いますが、同じ結果の場合はrank()が同じ注文番号を割り当てます)。分析関数。

関連する問題