Как я могу объединить два класса значений в запросе SQL?
-
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;
Не связан с StackOverflow