Làm cách nào tôi có thể sử dụng giá trị mặc định trong truy vấn Chọn trong PostgreSQL?


32

Tôi muốn sử dụng một giá trị mặc định cho một cột nên được sử dụng nếu không có hàng nào được trả về. Điều đó có khả thi trong PostgreSQL không? Tôi làm nó như thế nào? Hoặc có cách nào khác tôi có thể giải quyết điều này?

Ví dụ như một cái gì đó như thế này:

SELECT MAX(post_id) AS max_id DEFAULT 0 FROM my_table WHERE org_id = 3

Và nếu không có hàng nào org_id = 3trong bảng tôi muốn trả về 0.

Câu trả lời:


42
SELECT coalesce(MAX(post_id),0) AS max_id FROM my_table WHERE org_id = 3

hoặc là

SELECT case count(*) when 0 then 0 else MAX(post_id) end AS max_id
FROM my_table 
WHERE org_id = 3;

nếu bạn muốn max (post_id) là nullkhi có 1 hàng nhưng post_id là null

dbfiddle


13

Nếu bạn muốn hiển thị 0(than ôi 1 hàng) khi truy vấn của bạn trả về 0 hàng, thì bạn có thể sử dụng:

SELECT COALESCE( 
        ( SELECT MAX(post_id) FROM my_table WHERE org_id = 3 )
               , 0) AS max_id

7
SELECT 
  coalesce(MAX(post_id),0) AS max_id 
FROM 
  my_table 
WHERE 
  org_id = 3 

Ở trên không hoạt động nếu bạn muốn sử dụng tên mặc định cho trường tên và nó chỉ hoạt động nếu bạn sử dụng trường số. Truy vấn dưới đây hoạt động cho tất cả các loại trường ..

SELECT 
  COALESCE(
   (SELECT column_name FROM my_table WHERE id = -1), 
   'default_value'
  ) AS column_name;

2

Tôi không thể có được một trong những điều trên để làm việc.

Đây là những gì tôi tìm thấy để làm việc này:

SELECT COALESCE(A.max_id, B.dflt) FROM (
SELECT MAX(post_id) AS max_id FROM my_table WHERE org_id = 3) A
       RIGHT OUTER JOIN (SELECT 0 AS dflt) B
       ON 1 = 1

Tôi nhận ra không phải là một giải pháp thanh lịch nhưng thực hiện công việc.


1
SELECT coalesce(MAX(post_id),0) AS max_id FROM my_table WHERE org_id = 3làm việc tốt cho tôi
Jonas

2
@ mmandk9 bạn có thể giải thích chi tiết về "không hoạt động" - bạn đang sử dụng phiên bản postgres nào và bạn nhận được thông báo lỗi nào (nếu có)?
Jack Douglas

-2

Chỉ cần trả về giá trị mặc định nếu không tìm thấy hàng nào:

SELECT IFNULL(s_stock, 5)
  FROM stock_info 
 WHERE s_product_id = '43';

IFNULLkhông phải là cú pháp hợp lệ trong Postgres (hoặc SQL chuẩn). Nó được sử dụng trong MySQL.
Erwin Brandstetter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.