কোনও মান খুঁজে পাওয়া না গেলে '0' ফেরত পেতে আমি কীভাবে মাইএসকিউএল-এ এসইউএম ফাংশন পেতে পারি?


150

বলুন মাইএসকিউএলে আমার একটি সাধারণ ফাংশন রয়েছে:

SELECT SUM(Column_1)
FROM Table
WHERE Column_2 = 'Test'

Column_2 তে কোনও এন্ট্রিগুলিতে 'টেস্ট' লেখাটি না থাকলে এই ফাংশনটি ফিরে আসে NULL, আমি চাইলে 0টি ফিরে আসুক।

আমি সচেতন যে এখানে কয়েকবার অনুরূপ প্রশ্ন জিজ্ঞাসা করা হয়েছে, তবে আমি আমার উদ্দেশ্যগুলির সাথে উত্তরগুলি মানিয়ে নিতে সক্ষম হইনি, সুতরাং এই বাছাই করতে কিছু সহায়তার জন্য আমি কৃতজ্ঞ হব।


উত্তর:


305

COALESCEসেই পরিণতি এড়াতে ব্যবহার করুন ।

SELECT COALESCE(SUM(column),0)
FROM   table
WHERE  ...

এটি কার্যক্রমে দেখতে, দয়া করে এই বর্গফুটটি দেখুন: http://www.sqlfiddle.com/#!2/d1542/3/0


অধিক তথ্য:

তিনটি সারণী দেওয়া হয়েছে (সমস্ত সংখ্যা সহ একটি, সমস্ত নাল সহ একটি এবং একটি মিশ্রণ সহ):

এসকিউএল ফিডল

মাইএসকিউএল 5.5.32 স্কিমা সেটআপ :

CREATE TABLE foo
(
  id    INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  val   INT
);

INSERT INTO foo (val) VALUES
(null),(1),(null),(2),(null),(3),(null),(4),(null),(5),(null),(6),(null);

CREATE TABLE bar
(
  id    INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  val   INT
);

INSERT INTO bar (val) VALUES
(1),(2),(3),(4),(5),(6);

CREATE TABLE baz
(
  id    INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  val   INT
);

INSERT INTO baz (val) VALUES
(null),(null),(null),(null),(null),(null);

প্রশ্ন 1 :

SELECT  'foo'                   as table_name,
        'mixed null/non-null'   as description,
        21                      as expected_sum,
        COALESCE(SUM(val), 0)   as actual_sum
FROM    foo
UNION ALL

SELECT  'bar'                   as table_name,
        'all non-null'          as description,
        21                      as expected_sum,
        COALESCE(SUM(val), 0)   as actual_sum
FROM    bar
UNION ALL

SELECT  'baz'                   as table_name,
        'all null'              as description,
        0                       as expected_sum,
        COALESCE(SUM(val), 0)   as actual_sum
FROM    baz

ফলাফল :

| TABLE_NAME |         DESCRIPTION | EXPECTED_SUM | ACTUAL_SUM |
|------------|---------------------|--------------|------------|
|        foo | mixed null/non-null |           21 |         21 |
|        bar |        all non-null |           21 |         21 |
|        baz |            all null |            0 |          0 |

2
ধন্যবাদ ব্র্যাড কাজটি সুন্দরভাবে করে।
নিক

1
আরও কিছুর মাধ্যমে গ্রাহক সারণী (আইফনুল (কলাম, 0)) নির্বাচন করুন না? আমাদের যদি কিছু কলামে নুল মান এবং কিছু বাস্তব মান থাকে তবে কী হবে?
ডার্কসাইড

2
@ ডার্কসাইড: একেবারে অপ্রত্যাশিত কিছুই নয়
ব্র্যাড ক্রিস্টি

@ ব্র্যাডক্রিশি হ্যাঁ আপনি একেবারে ঠিক বলেছেন। SUM ন্যূনাল মানগুলির সাথেও দুর্দান্ত কাজ করে।
ডার্কসাইড

1
দয়া করে সতর্ক হন যখন হতে SUMকাঙ্ক্ষিত ফাংশন করে, AVGএবং COUNTপারেন বিভিন্ন ফল যখন প্রাপ্তির NULLআপনি ব্যবহার করতে তৎপর COALESCEযেমন @DarkSide দ্বারা প্রস্তাবিত, আপনার কাঙ্খিত ফলাফল উপর নির্ভর করে।
fyrye

65

ব্যবহার করুন IFNULLবা COALESCE:

SELECT IFNULL(SUM(Column1), 0) AS total FROM...

SELECT COALESCE(SUM(Column1), 0) AS total FROM...

তাদের মধ্যে পার্থক্যটি IFNULLহ'ল একটি মাইএসকিউএল এক্সটেনশান যা দুটি আর্গুমেন্ট নেয় এবং COALESCEএটি একটি স্ট্যান্ডার্ড এসকিউএল ফাংশন যা এক বা একাধিক আর্গুমেন্ট নিতে পারে। যখন আপনি কেবল দুটি যুক্তি ব্যবহার IFNULLকরছেন তখন কিছুটা দ্রুত হয়, যদিও এখানে পার্থক্যটি তাত্পর্যপূর্ণ নয় কারণ এটি কেবল একবার বলা হয়।


3
@ মার্ক কি পার্থক্য বি / ডাব্লু IFNULLবা COALESCE?? আপনি এটা ব্যাখ্যা করতে পারেন ??
mo sean

1
পুনশ্চ. যে কেউ পোস্টগ্রিসের সাথে কাজ করছে তার পক্ষে এটি কেবল সমর্থন করে coalesce
সিদ্ধার্থ

4

আপনি যা জিজ্ঞাসা করছেন ঠিক তা পেতে পারে না তবে আপনি যদি একটি সামগ্রিক SUM ফাংশন ব্যবহার করছেন যা বোঝায় যে আপনি টেবিলটি গ্রুপ করছেন are

কোয়েরিটি এমওয়াইএসকিউএল এর জন্য যায়

Select IFNULL(SUM(COLUMN1),0) as total from mytable group by condition

আপনি শর্ত অনুসারে গোষ্ঠী করেছেন কিন্তু এটি ফিরিয়ে দেবেন না (আপনি একগুচ্ছ অজানা শর্ত পাবেন)?
ল্লুইস মার্টিনেজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.