Wie kann ich aggregieren zwei Klassen von Werten in einer SQL-Abfrage?
-
05-07-2019 - |
Frage
Ich habe eine Tabelle, die Intervalle enthält:
CREATE TABLE tbl (
user_id: INTEGER,
start: TIMESTAMP,
end: TIMESTAMP,
billable: BOOLEAN
);
Ich möchte eine Ansicht erstellen, die wie folgt aussieht:
user_id | billable_time | unbillable_time
ich bekommen kann ein von diesen beiden eine Abfrage wie folgt aus:
SELECT user_id, sum(end - start) AS billable_time WHERE billable = TRUE GROUP BY user_id;
Ich brauche aber beiden Spalten, mit unbillable Zeit die äquivalent zu sein:
SELECT user_id, sum(end - start) AS unbillable_time WHERE billable = FALSE GROUP BY user_id;
Wie kann ich diese beiden Werte in einer Abfrage erhalten?
Lösung
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
Andere Tipps
SELECT user_id, billable, sum(end - start) AS billable_time
GROUP BY user_id,billable;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow