Como posso agregar duas classes de valores em uma consulta SQL?
-
05-07-2019 - |
Pergunta
Eu tenho uma tabela que contém intervalos:
CREATE TABLE tbl (
user_id: INTEGER,
start: TIMESTAMP,
end: TIMESTAMP,
billable: BOOLEAN
);
Eu quero criar uma visão parecida com esta:
user_id | billable_time | unbillable_time
posso obter um destes dois usando uma consulta como esta:
SELECT user_id, sum(end - start) AS billable_time WHERE billable = TRUE GROUP BY user_id;
No entanto, eu preciso de ambas as colunas, com o tempo NÃO FACTURÁVEL sendo o equivalente:
SELECT user_id, sum(end - start) AS unbillable_time WHERE billable = FALSE GROUP BY user_id;
Como posso obter esses dois valores em uma consulta?
Solução
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
Outras dicas
SELECT user_id, billable, sum(end - start) AS billable_time
GROUP BY user_id,billable;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow