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 এ এখানে
ডিবি <> বেহাল ।