Comment puis-je agréger deux classes de valeurs dans une requête SQL?
-
05-07-2019 - |
Question
J'ai une table contenant des intervalles:
CREATE TABLE tbl (
user_id: INTEGER,
start: TIMESTAMP,
end: TIMESTAMP,
billable: BOOLEAN
);
Je souhaite créer une vue ressemblant à ceci:
user_id | billable_time | unbillable_time
Je peux obtenir un de ces deux en utilisant une requête comme celle-ci:
SELECT user_id, sum(end - start) AS billable_time WHERE billable = TRUE GROUP BY user_id;
Cependant, j'ai besoin des deux colonnes, le temps non facturable étant l'équivalent:
SELECT user_id, sum(end - start) AS unbillable_time WHERE billable = FALSE GROUP BY user_id;
Comment puis-je obtenir ces deux valeurs dans une requête?
La solution
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
Autres conseils
SELECT user_id, billable, sum(end - start) AS billable_time
GROUP BY user_id,billable;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow