ELSE 0 কি আমার COUNT কেস WHEN স্টেটমেন্টে অন্তর্ভুক্ত রয়েছে?


10

মধ্যে পার্থক্য কি COUNT(CASE WHEN [Column A] = ____ THEN 1 END এবং COUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END?

আমি প্রাক্তনটি ব্যবহার করছি এবং আমি এখনও পর্যন্ত এই পার্থক্যটি দেখিনি; যুক্ত করার কারণ কী ELSE 0- এসকিউএল সার্ভারটি ভুলভাবে গণনা করবে এমন পরিস্থিতি কি আছে?


4
দ্বিতীয় উদাহরণটি সঠিক হওয়ার জন্য COUNT এর পরিবর্তে SUM ব্যবহার করা উচিত।
অলিভিয়ার জ্যাকট-ডেসকোম্বেস 21

উত্তর:


23

কেবলমাত্র প্রথম ক্ষেত্রে আপনি 1s এবং NULL গণনা করছেন enough (সিএসই-র বিবৃতিতে শর্তাবলীর মধ্যে কোনওটিই মেলে না এবং কোনও ইএলএসই ধারা নেই তবে NULL ফিরিয়ে দেওয়া হবে।) NULL গণনা হয় না। দ্বিতীয় ক্ষেত্রে 1 এবং 0 এর। 0 এর গণনা করা যেতে পারে।

দ্রুত উদাহরণ:

CREATE TABLE #CountMe (Col1 char(1));

INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');
INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');

SELECT
    COUNT(CASE WHEN Col1 = 'A' THEN 1 END) AS CountWithoutElse,
    COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE NULL END) AS CountWithElseNull,
    COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE 0 END) AS CountWithElseZero
FROM #CountMe;

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


9

যদি আপনি কেস স্টেটমেন্টের অন্য অংশটি নির্দিষ্ট না করে থাকেন তবে এটি ডিফল্টরূপে NULL ফিরিয়ে দেবে এবং আপনার ক্ষেত্রে এটি একটি ভাল জিনিস, কারণ গণনাটি নন-নুল মান গণনা করবে। আপনি যদি কেস থেকে অন্য কোনও কিছু ফিরিয়ে দেন তবে এটি 1, 0 বা 2 হিসাবে কিছু যায় আসে না, এটি সর্বদা 1 হিসাবে গণ্য হবে।

আপনি যদি গণনার পরিবর্তে যোগফল ব্যবহার করেন, তবে আপনার 1 বা 0 নম্বর দেওয়া উচিত।

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