عدد Postgres بحالة مختلفة في نفس الاستعلام
-
29-09-2020 - |
سؤال
يحرر بوستجرس 9.3
أنا أعمل على تقرير يحتوي على هذا المخطط التالي: http://sqlfiddle.com/#!15/fd104/2
الاستعلام الحالي يعمل بشكل جيد والذي يبدو كما يلي:
إنها في الأساس صلة داخلية بثلاثة جداول.لم أقم بإجراء هذا الاستعلام ولكن المطور هو الذي تركه وأريد تعديل الاستعلام.كما ترون، 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
لكنني لا أعرف أين أضع هذا الاستعلام أو كيف سيبدو الاستعلام. لذا فإن الناتج النهائي يحتوي على هذه الأعمدة
agent_id, name, completedsurvey, partialsurvey, loginhours, applicationperhour, rph
بمجرد أن يصبح الأمر على ما يرام، يمكنني إصلاحه بنفسي من خلال applicationperhour وrph
المحلول
إذا فهمتك بشكل صحيح، فأنت تبحث عن تجميع (مشروط) تمت تصفيته:
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;