PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Oracle setara dengan Postgres 'DISTINCT ON?

Efek yang sama dapat direplikasi di Oracle baik dengan menggunakan first_value() fungsi atau dengan menggunakan salah satu rank() atau row_number() fungsi.

Kedua varian juga berfungsi di Postgres.

first_value()

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

first_value memberikan nilai pertama untuk partisi, tetapi mengulanginya untuk setiap baris, sehingga perlu digunakan dalam kombinasi dengan distinct untuk mendapatkan satu baris untuk setiap partisi.

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

Mengganti row_number() dengan rank() dalam contoh ini menghasilkan hasil yang sama.

Fitur varian ini adalah dapat digunakan untuk mengambil N pertama baris untuk partisi tertentu (mis. "3 terakhir diperbarui") cukup dengan mengubah rownumber = 1 ke rownumber <= N .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan pt-pg-summary Percona Toolkit untuk PostgreSQL

  2. Postgres homebrew rusak

  3. Ikhtisar Ekstensi Tepercaya di PostgreSQL 13

  4. Lumen - Buat koneksi database saat runtime

  5. Upgrade Slony-I 2.0.x ke versi terbaru 2.1.x