একই ক্যোয়ারিতে বিভিন্ন শর্ত সহ গণনা পোস্ট করে


38

সম্পাদনা পোস্টগ্রেস 9.3

আমি একটি প্রতিবেদনে কাজ করছি যার নিম্নলিখিত স্কিমা রয়েছে: http://sqlfiddle.com/#!15/fd104/2

বর্তমান ক্যোয়ারী সূক্ষ্মভাবে কাজ করছে যা দেখতে এরকম দেখাচ্ছে:

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

মূলত এটি একটি 3 টেবিল অভ্যন্তরীণ যোগদান। আমি এই ক্যোয়ারীটি তৈরি করিনি তবে বিকাশকারী যিনি এটি রেখে গেছেন এবং আমি কোয়েরিটি পরিবর্তন করতে চাই। আপনি দেখতে পাচ্ছেন, TotalApplicationকেবলমাত্র উপর ভিত্তি করে মোট অ্যাপ্লিকেশন গণনা করে a.agent_id। এবং আপনি totalapplicationফলাফলটি কলাম দেখতে পারেন । আমি যা চাই তা হ'ল এটি সরিয়ে totalapplicationনতুন দুটি কলামে পরিবর্তন করা । আমি একটি যুক্ত করতে চানcompletedsurvey এবং partitalsurveyকলাম । সুতরাং মূলত এই অংশ হয়ে যাবে

SELECT a.agent_id as agent_id, COUNT(a.id) as CompletedSurvey
FROM forms a WHERE  a.created_at >= '2015-08-01' AND 
a.created_at <= '2015-08-31' AND disposition = 'Completed Survey'
GROUP BY a.agent_id

আমি কেবল যুক্ত করেছি AND disposition = 'Completed Survey'তবে আমার আর একটি কলামের প্রয়োজন partialsurveyযার জন্য একই প্রশ্নটি রয়েছে completedsurveyকেবলমাত্র পার্থক্য

AND disposition = 'Partial Survey'

এবং

COUNT(a.id) as PartialSurvey

তবে আমি কোথায় যে প্রশ্নটি রাখবেন বা ক্যোয়ারীটি কেমন হবে তা আমি জানি না o সুতরাং চূড়ান্ত আউটপুটটিতে এই কলামগুলি রয়েছে

agent_id, name, completedsurvey, partialsurvey, loginhours, applicationperhour, rph

একবার ঠিক হয়ে গেলে অ্যাপ্লিকেশন ঘন্টা এবং আরএইচএফ নিজেই এটি ঠিক করতে পারি

উত্তর:


75

যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনি একটি ফিল্টারড (শর্তাধীন) সমষ্টি খুঁজছেন:

SELECT a.agent_id as agent_id, 
       COUNT(a.id) filter (where disposition = 'Completed Survey') as CompletedSurvey, 
       count(a.id) filter (where disposition = 'Partial Survey') as partial_survey
FROM forms a 
WHERE a.created_at >= '2015-08-01' 
  AND a.created_at <= '2015-08-31' 
GROUP BY a.agent_id;


পুরানো সংস্করণগুলির জন্য সম্পাদনা করুন (<9.4) আপনার একটি caseবিবৃতি ব্যবহার করতে হবে :

SELECT a.agent_id as agent_id, 
       COUNT(case when disposition = 'Completed Survey' then a.id end) as CompletedSurvey, 
       COUNT(case when disposition = 'Partial Survey' then a.id end) as partial_survey
FROM forms a 
WHERE a.created_at >= '2015-08-01' 
  AND a.created_at <= '2015-08-31' 
GROUP BY a.agent_id;

আমি 9.3 ব্যবহার করছি। ঠিক আছে?
jackhammer013

@ জোইনফ্লোরিস্কা: না, 9.3 এর জন্য আপনার একটি CASEবিবৃতি প্রয়োজন । আপনি যে সংস্করণটি ব্যবহার করছেন তা সর্বদা নির্দিষ্ট করা উচিত, বিশেষত যদি এটি বর্তমানের না হয়।
a_horse_with_no_name

অনেক ধন্যবাদ! এখন নিখুঁত কাজ করে। দুঃখিত যে আমার পোস্টটি সম্পাদনা করেছে এবং এটি পরবর্তী সময় মনে রাখবে। ধন্যবাদ :)
jackhammer013

এখানে FILTER
নথির

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