it-swarm.asia

Bagaimana saya bisa menggunakan nilai default dalam kueri Select di PostgreSQL?

Saya ingin menggunakan nilai default untuk kolom yang harus digunakan jika tidak ada baris yang dikembalikan. Apakah itu mungkin di PostgreSQL? Bagaimana saya bisa melakukannya? Atau adakah cara lain yang bisa saya selesaikan?

Misalnya. sesuatu seperti ini:

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

Dan jika tidak ada baris dengan org_id = 3 dalam tabel saya ingin mengembalikan 0.

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

atau

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

jika Anda ingin maks (post_id) menjadi null ketika ada 1 baris tetapi post_id adalah nol

dbfiddle

Jika Anda ingin menunjukkan 0 (sayangnya 1 baris) saat kueri Anda mengembalikan 0 baris, maka Anda dapat menggunakan:

SELECT COALESCE( 
        ( SELECT MAX(post_id) FROM my_table WHERE org_id = 3 )
               , 0) AS max_id
14
ypercubeᵀᴹ
SELECT 
  coalesce(MAX(post_id),0) AS max_id 
FROM 
  my_table 
WHERE 
  org_id = 3 

Di atas tidak berfungsi jika Anda ingin menggunakan nama default untuk bidang nama dan hanya berfungsi jika Anda menggunakan bidang angka. Kueri di bawah ini berfungsi untuk semua jenis bidang ..

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

Saya tidak bisa mendapatkan salah satu di atas bekerja.

Inilah yang saya temukan bekerja untuk ini:

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

Saya menyadari bukan solusi yang elegan tetapi melakukan pekerjaan.

3
mmandk9