Есть несколько способов подойти к этому.
Вы можете запустить агрегирование один раз в общем табличном выражении и использовать его в подзапросе.
with totals as (
SELECT Day, Flight, SUM(LuggageWeight) total_weight
FROM test
GROUP BY Day, Flight
)
select *
from totals
where total_weight = (select max(total_weight) from totals);
Или объединить группирование с оконными функциями:
select day, flight, total_weight
from (
SELECT Day, Flight,
SUM(LuggageWeight) total_weight,
dense_rank() over (order by SUM(LuggageWeight) desc) as rnk
FROM test
GROUP BY Day, Flight
) totals
where rnk = 1;
Вышесказанное может быть легко расширено, чтобы включить также 2-й самый тяжелый полет и так далее. Производная таблица (подзапрос) totals
по существу необходима только из-за правил видимости.
И если вас интересует только одна строка, даже если существует несколько комбинаций день / полет с тот же (максимальный) общий вес, который вы можете использовать:
SELECT Day, Flight, SUM(LuggageWeight) total_weight
FROM test
GROUP BY Day, Flight
order by SUM(LuggageWeight) desc
fetch first 1 rows only;
Опять же: вышеупомянутое не совсем то же самое, что и другие решения, но может быть достаточно хорошим.