Ты вообще знаешь, что ты здесь делаешь?
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
Если на запись t2 приходится несколько записей T3, вы получите декартово произведение, непреднамеренное умножение столбца СУММ.
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 - из какой строки он должен исходить?
person
RichardTheKiwi
schedule
16.02.2011