2016-08-24 1 views
0

私は レポートをご希望の他の類似の統計情報がいくつかあるため、アナリティクスを使用したいと思います。これは 'partition by'を正しく使用することですか?

Q: Oracle Analyticsを使用すると、空港ごとに1行しか取得できません。 Wernfriedとして

with detail_records as 
(select 1 as passenger_id, 'ATL' as airport, 'E4' as gate, 10 as luggage_weight from dual union all 
select 2 as passenger_id, 'ATL' as airport, 'E4' as gate, 25 as luggage_weight from dual union all 
select 2 as passenger_id, 'SFO' as airport, 'E4' as gate, 20 as luggage_weight from dual union all 
select 3 as passenger_id, 'SFO' as airport, 'E4' as gate, 30 as luggage_weight from dual union all 
select 4 as passenger_id, 'SFO' as airport, 'E4' as gate, 40 as luggage_weight from dual 
) 
select airport, 
     count(*) over (partition by airport) as airport_count, 
     sum(luggage_weight) over (partition by airport, gate) as a_g_weight 
from detail_records 
where gate='E4' 

結果

AIRPORT AIRPORT_COUNT A_G_WEIGHT 
ATL  2    35 
ATL  2    35 
SFO  3    90 
SFO  3    90 
SFO  3    90 

望ましい結果

Airport Airport_count A_G_WEIGHT 
ATL  2    35 
SFO  3    90 
+1

ことにより、簡単なGROUPを使用してくださいDISTINCT airport、... ' –

+1

1つのゲートでフィルタリングすると、そのカラムのパーティションに何も追加されません。複数のゲート(またはすべて)でフィルタリングすると、理由を説明するために何もせずに複数の 'a_g_weight'値を持つことになります。 –

答えて

1

あなたがDISTINCTキーワードを探して、言いました。

「旅客ID」欄には重要であり、重複を避けるために望んでいないので、あなたはそれを呼び出す必要があります。

with detail_records as 
(select 1 as passenger_id, 'ATL' as airport, 'E4' as gate, 10 as luggage_weight from dual union all 
select 2 as passenger_id, 'ATL' as airport, 'E4' as gate, 25 as luggage_weight from dual union all 
select 2 as passenger_id, 'SFO' as airport, 'E4' as gate, 20 as luggage_weight from dual union all 
select 3 as passenger_id, 'SFO' as airport, 'E4' as gate, 30 as luggage_weight from dual union all 
select 4 as passenger_id, 'SFO' as airport, 'E4' as gate, 40 as luggage_weight from dual 
) 
select distinct airport, 
     count(*) over (partition by airport) as airport_count, 
     sum(luggage_weight) over (partition by airport, gate) as a_g_weight 
from detail_records 
where gate='E4' 
0

選択し `てみクエリ

select airport, 
     count(*) as airport_count, 
     sum(luggage_weight) as a_g_weight 
from detail_records 
where gate='E4' 
group by airport 
関連する問題