পোস্টগ্রিএসকিউএল-এর একটি নির্বাচন প্রশ্নে আমি কীভাবে একটি ডিফল্ট মান ব্যবহার করতে পারি?


32

আমি কোনও কলামের জন্য একটি ডিফল্ট মান ব্যবহার করতে চাই যা কোনও সারি ফিরে না আসলে ব্যবহার করা উচিত। পোস্টগ্রিজ এসকিউএলে এটি কি সম্ভব? আমি এটা কিভাবে করবো? নাকি এর সমাধান করার মতো অন্য কোনও উপায় আছে?

যেমন এরকম কিছু:

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

এবং org_id = 3টেবিলের সাথে কোনও সারি না থাকলে আমি ফিরে আসতে চাই 0

উত্তর:


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

অথবা

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

আপনি যদি সর্বাধিক (পোস্ট_আইডি) চান nullযখন 1 সারি থাকে তবে পোস্ট_আইডি শূন্য থাকে

dbfiddle


13

যদি 0আপনার কোয়েরিটি 0 টি সারি ফেরায় যখন আপনি (হায়রে 1 সারি) দেখাতে চান তবে আপনি ব্যবহার করতে পারেন:

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 

আপনি যদি নাম ক্ষেত্রের জন্য ডিফল্ট নাম ব্যবহার করতে চান তবে উপরেরগুলি কাজ করে না এবং আপনি যদি নম্বর ক্ষেত্র ব্যবহার করেন তবে এটি কাজ করে। নীচের ক্যোয়ারী সব ধরণের ক্ষেত্রে কাজ করে ..

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

2

উপরের কোনটিই আমি কাজ করতে পারি না।

আমি এর জন্য যা কাজ করতে পেরেছি তা এখানে:

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

আমি বুঝতে পারি একটি মার্জিত সমাধান নয় তবে কাজটি করে।


1
SELECT coalesce(MAX(post_id),0) AS max_id FROM my_table WHERE org_id = 3আমার জন্য ভাল কাজ করে।
জোনাস

2
@ এমমান্ড 9 আপনি কীভাবে "কাজ করে না" তার বিস্তারিত ব্যাখ্যা করতে পারেন - আপনি পোস্টগ্রিজের কোন সংস্করণে আছেন এবং কোন ত্রুটি বার্তাটি (যদি থাকে) পান?
জ্যাক ডগলাস

-2

কোনও সারি পাওয়া না গেলে কেবল ডিফল্ট মানটি ফিরিয়ে দিন:

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

IFNULLপোস্টগ্রিসে (বা স্ট্যান্ডার্ড এসকিউএল) বৈধ সিনট্যাক্স নয়। এটি মাইএসকিউএলে ব্যবহৃত হয়।
এরউইন ব্র্যান্ডসটেটার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.