Вы смешиваете два уровня агрегации.
Первый уровень агрегации - это когда вы "group by a
". Если бы вы сделали это один, вы получите одну строку для каждого значения A
. sum(b)
и sum(c)
будут иметь определенные значения c для каждой из этих строк.
Второй уровень агрегации использует результаты первого уровня. Когда вы говорите sum(sum(b)+sum(c))
, вы делаете вторую агрегацию результатов первой агрегации. От этой второй агрегации есть только один результат и только одна строка.
Поскольку в конечном выводе имеется только одна строка, где могут быть кратны значения sum(b)
go?
Может быть, вы думаете, что sum(b)
само по себе должно быть суммой всех B
в каждом ряду T1
? Синтаксис работает не так. sum(b)
говорит одна агрегация, а не две, поэтому она всегда будет непосредственным результатом операции group by
.
То, что будет работать, это select sum(sum(b)),sum(sum(c)),sum(sum(b)+sum(c)) from t1 group by a;
. Теперь вы делаете два уровня агрегации везде.