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

Trả về 0 nếu không tìm thấy bản ghi

Bạn có thể:

SELECT COALESCE(SUM(columnA), 0) FROM my_table WHERE columnB = 1
INTO res;

Điều này xảy ra hiệu quả, bởi vì truy vấn của bạn có một hàm tổng hợp và do đó luôn luôn trả về một hàng, ngay cả khi không tìm thấy gì trong bảng bên dưới.

Các truy vấn thuần túy không có tổng hợp sẽ trả về không có hàng trong trường hợp như vậy. COALESCE sẽ không bao giờ được gọi và không thể cứu bạn. Trong khi xử lý một cột duy nhất, thay vào đó, chúng ta có thể bao bọc toàn bộ truy vấn:

SELECT COALESCE( (SELECT columnA FROM my_table WHERE ID = 1), 0)
INTO res;

Cũng hoạt động cho truy vấn ban đầu của bạn:

SELECT COALESCE( (SELECT SUM(columnA) FROM my_table WHERE columnB = 1), 0)
INTO res;

Tìm hiểu thêm về COALESCE() trong sách hướng dẫn.
Tìm hiểu thêm về các chức năng tổng hợp trong sách hướng dẫn.
Thêm các lựa chọn thay thế trong bài đăng sau này:

  • Cách trả về giá trị từ một hàm nếu không tìm thấy giá trị nào


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pg_ctl Mẹo và Thủ thuật

  2. Người dùng ứng dụng so với Bảo mật cấp hàng

  3. Cài đặt trình điều khiển PDO cho PostgreSQL trên Mac (sử dụng Zend cho eclipse)

  4. Ổ cứng thể rắn Intel SSD, hiện đã ra khỏi danh sách sh..err, shamed

  5. Cấu hình Puma Cluster trên Heroku