У меня трудные времена с PostgreSQL SELECT
, который на первый взгляд выглядел довольно просто.Задействованные таблицы:
CREATE TABLE events (id INT, customers_id INT);
CREATE TABLE jobs (
events_id INT,
"from" TIMESTAMP,
until TIMESTAMP,
users_id INT);
- каждое событие может иметь несколько заданий
- начало и конец события определяется самым низким
"from"
и самым высоким until
соответствующегоjobs - каждое задание может быть назначено пользователю
Мне нужна таблица, подобная следующей:
events_id | customers_id | min(from) | max(until) | total_jobs | open_jobs
1 | 1 | .. 08:00 | .. 11:00 | 4 | 1
Мой выбор пока:
SELECT e.id, e.customers_id, min(j.from) as min_from, max(j.until) as max_until,
count(j.id) as total_jobs
FROM events e
LEFT JOIN jobs j ON j.events_id = e.id
GROUP BY e.id, e.customers_id
Это дает мне результат для первых 5 столбцов, но как я могу включить подсчет секунд только для заданий с users_id = NULL
?Я бы предположил, что мне нужна вторая LEFT JOIN
в таблице заданий, но каким-то образом я не могу заставить ее работать.
Как я могу реализовать это правильно и эффективно?