كيف يمكنني تجميع فئتين من القيم في استعلام SQL؟

StackOverflow https://stackoverflow.com/questions/1406663

  •  05-07-2019
  •  | 
  •  

سؤال

ولدي جدول يحتوي على فترات:

CREATE TABLE tbl (
    user_id: INTEGER,
    start: TIMESTAMP,
    end: TIMESTAMP,
    billable: BOOLEAN
);

وأريد أن إنشاء طريقة عرض الذي يبدو مثل هذا:

user_id | billable_time | unbillable_time

ويمكنني الحصول على واحدة من هذين باستخدام استعلام مثل هذا:

SELECT user_id, sum(end - start) AS billable_time WHERE billable = TRUE GROUP BY user_id;

ولكن، ولست بحاجة كلا العمودين، مع مرور الوقت غير واجبة الدفع يكون ما يعادل:

SELECT user_id, sum(end - start) AS unbillable_time WHERE billable = FALSE GROUP BY user_id;

وكيف يمكنني الحصول على تلك القيمتين في استعلام واحد؟

هل كانت مفيدة؟

المحلول

select user_id, sum(case billable when 1 then (end - start) end) as can_bill,
  sum(case billable when 0 then (end - start) end) as unbillable

نصائح أخرى

SELECT user_id, billable, sum(end - start) AS billable_time 
GROUP BY user_id,billable;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top