Соединить два стола и с суммой и примеркой - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть две таблицы Users и Inputs со следующей схемой

Users - id, name, create_time
Inputs - id, user_id, create_time, amount

Я создал 2 похожих запроса, которые выбирают данные объединения из двух таблиц.

Первый запрос возвращает всех пользователей, добавляя поле с именем daily_amount, которое суммирует все Inputs каждого пользователя в заданном временном диапазоне - Работает нормально

Второй запрос - Добавляет фильтр идентификатора пользователя

Я хочу ограничить запрос конкретным пользователем по Id (id = 12 в данном запросе), я получаю противоречивые результаты, я получаю одну запись, но она имеет другой Id, а daily_amount - это неверен.

Ваша помощь приветствуется.

-- All users query - Works fine
SELECT Users.id,
       Users.name,
       Users.create_time,
       SUM(Inputs.amount) AS daily_amount
FROM Users
LEFT JOIN Inputs ON Users.id = Inputs.user_id
AND Inputs.create_time BETWEEN startTime AND endTime
GROUP BY Users.id,
         Users.name



-- User specific query
SELECT Users.id,
       Users.name,
       Users.create_time,
       SUM(Inputs.amount) AS daily_amount
FROM Users
LEFT JOIN Inputs ON Users.id = Inputs.user_id
AND Users.id = 12             -- trying to filter only specific user by id
AND Inputs.create_time BETWEEN startTime AND endTime
GROUP BY Users.id,
         Users.name

1 Ответ

1 голос
/ 28 апреля 2019

Вы должны поместить условие в предложение WHERE:

SELECT Users.id,
       Users.name,
       Users.create_time,
       SUM(Inputs.amount) AS daily_amount
FROM Users
LEFT JOIN Inputs ON Users.id = Inputs.user_id
WHERE Users.id = 12
AND Inputs.create_time BETWEEN startTime AND endTime
GROUP BY Users.id, Users.name, Users.create_time
...