FILTERপোস্টগ্রিস 9.4+ এ সমষ্টিগত ধারা
পোস্টগ্রাগেস 9.4 এর পর থেকে একটি পরিষ্কার এবং দ্রুত (এসকিউএল স্ট্যান্ডার্ড) উপায় রয়েছে:
SELECT count(*) FILTER (WHERE score BETWEEN 0 AND 3) AS low
, count(*) FILTER (WHERE score BETWEEN 4 AND 7) AS mid
, count(*) FILTER (WHERE score BETWEEN 8 AND 10) AS high
, count(*) AS total
FROM foo;
totalযোগ করা হয় low, midএবং high, যদি না NULL বা অন্যান্য মান জড়িত থাকে।
লিঙ্ক:
নীচে পড়ুন।
পোস্টগ্রিজ 9.3-
কয়েকটি কৌশল রয়েছে:
@ ফিল একটি CASEবিবৃতি সহ স্ট্যান্ডার্ড উপায় সরবরাহ করেছে (ব্যতীত sum(1), যা আদর্শ উপায় নয়)। আমি একটি সংক্ষিপ্ত ফর্ম ব্যবহার করতে চাই:
SELECT count(score BETWEEN 0 AND 3 OR NULL) AS low
, count(score BETWEEN 4 AND 6 OR NULL) AS mid
, count(score BETWEEN 7 AND 10 OR NULL) AS high
, count(*) AS total
FROM foo;
যদি আপনার প্রশ্নগুলিতে আপনার মানগুলি সংজ্ঞায়িত করা হয় (কেবল 0- 10সম্ভব) তবে আরও সরল করুন:
SELECT count(score < 4 OR NULL) AS low
, count(score BETWEEN 4 AND 6 OR NULL) AS mid
, count(score > 6 OR NULL) AS high
, count(*) AS total
FROM foo;
কিছুটা খাটো, সবেমাত্র দ্রুত।
সূক্ষ্ম পার্থক্য
আছে সূক্ষ্ম পার্থক্য যখন তুলনায় sum()এ ফিল এর উত্তর :
সর্বাধিক গুরুত্বপূর্ণ, প্রতি নথি :
এটি লক্ষ করা উচিত যে ব্যতীত count, কোনও সারি নির্বাচন করা না হলে এই ফাংশনগুলি একটি নাল মান প্রদান করে। বিশেষত, sumকোনও সারি শূন্য হয় না, শূন্য নয় যেমন প্রত্যাশা করা যায়, ...
count(*) হয় আদর্শ উপায় এবং একটি বিট যতো তাড়াতাড়ি sum(1)। আবার, নাল বনাম 0 প্রয়োগ হয়।
এগুলির যে কোনও প্রশ্নের (ফিল সহ) নাল মান গণনা করে total। যদি এটি পছন্দসই না হয় তবে পরিবর্তে ব্যবহার করুন:
count(score) AS total_not_null
পৃষ্ঠা 9.3 এ এসকিউএল ফিডল । pb 10 এ এখানে
ডিবি <> বেহাল ।