PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Oracle tương đương với DISTINCT ON của Postgres?

Hiệu ứng tương tự có thể được sao chép trong Oracle bằng cách sử dụng first_value() hoặc bằng cách sử dụng một trong các rank() hoặc row_number() chức năng.

Cả hai biến thể cũng hoạt động trong Postgres.

first_value()

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

first_value cung cấp giá trị đầu tiên cho phân vùng, nhưng lặp lại nó cho mỗi hàng, vì vậy cần phải sử dụng nó kết hợp với distinct để có được một hàng duy nhất cho mỗi phân vùng.

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

Thay thế row_number() với rank() trong ví dụ này mang lại cùng một kết quả.

Một tính năng của biến thể này là nó có thể được sử dụng để tìm nạp N đầu tiên hàng cho một phân vùng nhất định (ví dụ:"3 lần cập nhật gần đây nhất") chỉ bằng cách thay đổi rownumber = 1 tới 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. Làm cách nào để làm cho Java và Postgres enums hoạt động cùng nhau để cập nhật?

  2. Khai báo SQLAlchemy:xác định trình kích hoạt và chỉ mục (Postgres 9)

  3. LỖI:không có ràng buộc duy nhất phù hợp với các khóa nhất định cho thanh bảng được tham chiếu

  4. Các giải pháp DBaaS tốt nhất cho PostgreSQL

  5. Xuất cơ sở dữ liệu PostgreSQL với phpPgAdmin