Есть две таблицы: задачи и кол-во часов для каждой из задач в конкретную дату:
task (id_task, id_user, id_object)
task_hours (id_task, date, hours)
Выборкой получаю подсчет часов для каждой из задач в промежуток времени:
SELECT task_hours.id_task AS taskId, SUM(task_hours.hours) AS summ
FROM task_hours
WHERE task_hours.date >=1519851600 AND task_hours.date < 1522443600
GROUP BY task_hours.id_task
Каким образом можно объединить получившийся запрос с таблицей task
, чтобы результат выглядел как:
id_task, id_user, id_object, summ
То что ты хочешь сделать называется подзапрос (а точнее derived tables
, не помню русский термин), для начала вариант с оным:
SELECT th.taskId, t.id_user, t.id_object, th.summ
( SELECT task_hours.id_task AS taskId, SUM(task_hours.hours) AS summ
FROM task_hours
WHERE task_hours.date >=1519851600 AND task_hours.date < 1522443600
GROUP BY task_hours.id_task ) AS th
JOIN task AS t ON th.id_task == t.id_task
Но использовать его совсем не обязательно: mysql
допускает присутствие обычных столбцов в GROUP BY
-запросах, а так как ты группируешь по первичному ключу таблицы task
(я надеюсь), то значения всех таких столбцов будут однозначны, а запрос упрощается до:
SELECT th.id_task AS taskId, t.id_user, t.id_object, SUM(th.hours) AS summ
FROM task_hours AS th JOIN task AS t ON th.id_task == t.id_task
WHERE th.date >=1519851600 AND th.date < 1522443600
GROUP BY th.id_task
Если есть вопрос, что из этого более производительно, то почти наверняка (математический термин) оптимизатор запросов выстроит их планы одинаково, так что производительностью они отличаться не будут, но предпочтительна всё же вторая форма — она требует от оптимизатора быть чуточку менее умным.
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Как можно через шаблоны создать массив из разных типов(double, char, int и тд)?
Нужно сравнить два изображения (jpg), чуть позже, возможно, ещё и видео
Имеется файл, в нём написаны словаС клавиатуры вводится слово с неповторяющимися буквами