Это ваша ошибка:
left join df2 on sum(month_1)
ON должно выполняться условие для объединения строк. sum(month_1)
- это не условие, а отдельное значение.
И хотя, скажем, sum(month_1) > 0
- это условие, оно также не будет работать, поскольку вы объединяете отдельные строки, а sum(month_1)
- это не значение строки, но агрегация по нескольким строкам.
У вас on df1.person_id = df2.person_id
позже, но предложение ON
относится к JOIN
, а не к концу запроса.
Вам нужно выбрать SUM(df2.month_1)
, поэтому поместите его в предложение SELECT
. Следующий запрос дает вам все df1
строк вместе с их month_1
суммой (или нулем, когда для человека нет df2
записей).
SELECT df1.*, SUM(df2.month_1)
FROM df1
left join df2 ON df2.person_id = df1.person_id
WHERE UPPER(df1.place_1) = 'X'
GROUP BY df1.person_id;
Я не знаю, является ли SQLite поддерживает группирование по ключу и выбор его функционально зависимых столбцов (df1.*
). Если вы хотите показать только df1.person_id
, вам следует заменить df1.*
на df1.person_id
. Если вам нужно больше df1
столбцов, а SQLIte не позволяет df1.*
, то вы можете объединиться перед объединением (что я считаю хорошим стилем в любом случае):
SELECT df1.*, d2.total
FROM df1
left join
(
SELECT person_id, SUM(month_1) AS total
FROM df2
GROUP BY person_id
) d2 ON d2.person_id = df1.person_id
WHERE UPPER(df1.place_1) = 'X';