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

Tác dụng không mong muốn của việc lọc đối với kết quả từ truy vấn crosstab ()

extra1, extra2, ... "cột bổ sung" trong thuật ngữ crosstab.
Hướng dẫn sử dụng mô-đun tablefunc giải thích các quy tắc:

Và xa hơn nữa:

Nhấn mạnh vào các phần chính của tôi.

Bạn chỉ sắp xếp theo row_name :

ORDER  BY row_name ASC

Không quan trọng trong ví dụ đầu tiên khi bạn lọc bằng:

WHERE ... t.extra1 = 'val1'  -- single quotes by me

Tất cả hàng nhập có extra1 = 'val1' dù sao. Nhưng vấn đề quan trọng trong ví dụ thứ hai khi bạn lọc bằng:

WHERE ... t.extra1 IN('val1', ...) --> More values

Bây giờ, yêu cầu đầu tiên được in đậm ở trên bị vi phạm đối với cột phụ extra1 . Mặc dù thứ tự sắp xếp của truy vấn đầu vào đầu tiên là không xác định, các giá trị kết quả cho cột "bổ sung" extra1 được hái tùy ý. Các giá trị khác có thể có cho extra1 , càng ít hàng sẽ có 'val1':đó là những gì bạn đã quan sát thấy.

Bạn vẫn có thể làm cho nó hoạt động:để báo cáo extra1 = 'val1' cho mọi row_name có ít nhất một trong số đó, hãy thay đổi ORDER BY tới:

ORDER  BY row_name, (extra1 <> 'val1')

Sắp xếp 'val1' ở trên cùng. Giải thích cho boolean đó biểu thức (với các liên kết đến nhiều hơn):

Các cột "bổ sung" khác vẫn được chọn tùy ý trong khi thứ tự sắp xếp không xác định.

Khái niệm cơ bản về Crosstab:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không phân biệt chữ hoa chữ thường như (ilike) trong Datamapper với Postgresql

  2. Bảng và chỉ mục so với HDD và SSD

  3. Bên TỪ của một CẬP NHẬT liên quan như thế nào đến bảng được nhắm mục tiêu cho CẬP NHẬT?

  4. Postgres - Nhiều liên kết khiến truy vấn của tôi trả về dữ liệu không chính xác

  5. Postgresql Chuyển đổi bit thay đổi thành số nguyên