2016-08-30 7 views
0

ハイブテーブルでは、実際の販売と予測があります。私は平均価格を計算するためのグループ化された列の操作ハイブ

item date salesDol salesUnit predictionU 
1 1/1/2016 5.99  1   0.9 
1 1/1/2016 5.49  1   0.9 
1 2/1/2016 5.99  1   0.84 
1 3/1/2016 6.04  1   0.92 

:ので、データは次のようになります

create table data1 as 
select item, date, predictionU from data 
JOIN 
(select sum(salesDol) as totDol, sum(salesUnit) as totUnit from data); 

だから、各行に私がtotDoltotUnitを持っています。今、最終的な外挿販売単位を取得するために私が試してみてください。

create table data2 as 
    select item, date, sum(predictionU)*totDol/totUnit from data1 group by item, date; 

が、私はというエラーを取得:

FAILED:SemanticException [エラー10025]:式ではない 'totDol'

キーBY GROUPで

私は、ハイブがなぜグループバイ句にtotDolを含めるよう求めているのか理解できません。なにか提案を。

答えて

2

ただ、ウィンドウ関数を使用します。

select item, date, predictionU, 
     sum(salesDol) over() as totDol, 
     sum(salesUnit) over() as totUnit 
from data; 

あなたは、あなたの最後のクエリでこれを含めることができます。

select item, date, predictionU, 
     sum(salesDol) over() as totDol, 
     sum(salesUnit) over() as totUnit, 
     (preditionU * sum(salesDol) over()/sum(salesUnit) over()) 
from data; 
+0

私は、クエリの簡易版を尋ねました。 'sum(tot_sales)を(sls_type_c = 'regular'で区切って)' regular_sls'として 'sum(tot_sales)を行うだけで、sum(sls_type_c = 'regular'、次にtot_sales else 0 end)をregular_sls'として持つ場合。正しい? @abhiieor – abhiieor

+0

いいえ、すべての「通常」の売上の合計に対して、sum(sls_type_c = 'regular'、tot_sales else 0 end)over() 'を実行します。 –

関連する問題