2017-04-19 10 views
2

ここはselect文のSQLサンプルです。 oracleからpostgresに変換するには、ポストグルのパーティション上でoracle個数を再実装する簡単な方法が必要です。Postgresでパーティション上でOracleのカウント(別名)を実装する方法

, count(distinct on pm.mobseg_state) over (partition by pm.trans_id) as mob_segments_count 
, count(distinct on pm.country_reg_region_cd) over (partition by pm.trans_id) as countries_count 
+0

私はあなたがOracleまたはPostgresのウィンドウ関数で 'distinct'を使うことはできないと思います。 –

+0

現在、oracleで動作しています。 postgresのための回避策を探しています。 – Water223

答えて

0

Postgresはcount(distinct)を直接サポートしていません。しかし、サブクエリで実装することができます:

select . . ., 
     sum((seqnum_tm = 1)::int) as mob_segments_count , 
     sum((seqnum_tr = 1)::int) as countries_count 
from (select . . ., 
      row_number() over (partition by pm.trans_id, pm.country_reg_region_cd order by pm.country_reg_region_cd) as seqnum_tr, 
      row_number() over (partition by pm.trans_id, pm.mobseg_state order by pm.pm.mobseg_state) as seqnum_tm 
     . . . 
    ) . . . 

アイデアは簡単です。 partition byのキーと別個の列のrow_number()を計算します。次に、値が「1」である回数を加算します。ウィンドウ関数をネストできないため、これにはサブクエリが必要です。

+0

このバージョンの実装を終了しました。ありがとう。 – Water223

関連する問題