Вы действительно знаете, что делаете здесь?
SELECT t1.column, t2.column, SUM(t1.column * t2.column)
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.id
JOIN table3 t3 ON t2.id = t3.id
GROUP BY t1.column, t2.column;
Запрос очень подозрительный, по крайней мере, двумя способами:
Таблица3 не используется - за исключением проверки наличия записи в t3 для идентификатора в t2. Ты этого хотел? Potential pitfall
Если имеется несколько записей T3 на одну запись t2, вы получите декартово произведение , непреднамеренное умножение столбца SUM.
GROUP BY t1.column, t2.column - это объединяет все уникальные комбинации (t1.column, t2.column)
и суммирует результат t1.column * t2.column
через них. Это действительно то, что вы после?
Для пункта 2 рассмотрим эти (исходные) данные:
t1.id, t1.column, t2.column, t1.column*t2.column
1 2 3 6
2 2 3 6
3 3 3 9
4 3 4 12
В итоге вы получите
t1.column, t2.column, SUM(t1.column*t2.column)
2 3 12
3 3 9
3 4 12
Смотрите, что (2,3) сложило сумму.
Если я добавлю столбцы в выборку, я также должен добавить столбцы в группу с помощью.
Столбцы в SELECT (за исключением некоторых СУБД, таких как MySQL) должны быть либо агрегатом (например, sum / avg / min / max), либо столбцом в предложении GROUP BY. Существуют и другие выражения, которые вы можете использовать, например, скалярные функции или значения констант, а не из таблиц.
Если вам действительно нужно больше столбцов из таблицы , относящихся к агрегатам, вам необходимо четко подумать о почему . например Если вы группируете по столбцу 1 и усредняющему столбцу 2, что вы будете делать с столбцом 3 - из какой строки он должен появиться?