Если вы хотите строки с максимальным значением, тогда подумайте «фильтрация», а не «агрегация»:
Кроме того, join
не требуется.Все необходимые вам столбцы находятся в invoice
.Итак:
select i.*
from invoice i
where i.invoiceTotal = (select max(i2.invoiceTotal)
from invoice i2
);
Причина, по которой ваш запрос возвращает одну строку, заключается в том, что это агрегирующий запрос без group by
.По определению, такой запрос возвращает в точности одну строку (даже если базовая таблица пуста).
Вы выбираете столбцы, не входящие в group by
.Как правило, это ошибка, хотя некоторые базы данных (к сожалению) допускают этот синтаксис.В любом случае, я подозреваю, что вышеприведенная версия делает то, что вам действительно нужно.