sql >> データベース >  >> RDS >> PostgreSQL

OracleのPostgresのDISTINCTONに相当しますか?

    first_value()を使用することにより、同じ効果をOracleで再現できます。 関数またはrank()のいずれかを使用して またはrow_number() 関数。

    どちらのバリアントもPostgresで機能します。

    first_value()

    select distinct col1, 
    first_value(col2) over (partition by col1 order by col2 asc)
    from tmp
    

    first_value パーティションの最初の値を示しますが、行ごとに繰り返すため、distinctと組み合わせて使用​​する必要があります。 パーティションごとに1つの行を取得します。

    row_number() / rank()

    select col1, col2 from (
      select col1, col2, 
      row_number() over (partition by col1 order by col2 asc) as rownumber 
      from tmp
    ) foo
    where rownumber = 1
    

    row_number()を置き換える rank()を使用 この例では、同じ結果が得られます。

    このバリアントの特徴は、最初のNをフェッチするために使用できることです。 rownumber = 1を変更するだけで、特定のパーティションの行(「最後の3つの更新」など) rownumber <= Nへ 。



    1. 条件付き集計のパフォーマンス

    2. Oracleで例外が発生した後もカーソルループ処理を続行する方法

    3. postgresqlデータベースで大文字と小文字を区別しない照合を使用するにはどうすればよいですか?

    4. GUIDのSCOPE_IDENTITY()?