Вернуть самое большое число
Задание: Выбрать список самых дорогих моделей автомобилей каждого бренда. Есть по две машины каждой марки, нужно, чтобы выводилось по самой дорогой из каждой, то есть, должно быть выведено 6 машин.
Выводимые поля: BrandName, AutoModel, Price
Отношения:
SELECT
BrandName,
AutoModel,
MAX(Auto.Price) as 'Стоимость'
FROM Brand JOIN Auto ON (Brand.BrandID = Auto.BrandID)
GROUP BY Auto.BrandID
ORDER BY MAX(Auto.Price) DESC
Если убрать BrandName, AutoModel, то все работает, он находит самое большое число в каждой марке, как вывести необходимые столбы? Ругается, пишет:
Столбец "Brand.BrandName" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
Ответы (3 шт):
Если чётко две машины каждой марки - вот так должно работать (проверял)
SELECT t1.*, brands.BrandName
FROM Auto t1
JOIN Auto t2 ON (t1.brandID = t2.brandID AND t1.price > t2.price)
JOIN Brands on (t1.BrandID = Brands.BrandID)
Но если не две модели в марке, а, скажем, три - сорри. Но может, от моего варианта можно как-то оттолкнуться...
РЕШЕНИЕ
select distinct
BrandName,
MAX(Price)
from Brand
inner join Auto on Brand.BrandID = Auto.BrandID
group by BrandName
order by MAX(Price) DESC
Если не предполагается несколько машин одной марки с одинаковой максимальной ценой тогда можно вот так:
select
b.BrandName,
a.AutoModel,
a.Price
from (
select
a.BrandId,
max(a.Price) as Price
from
Auto a
group by
a.BrandId
) agr
join Auto a on agr.BrandId = a.BrandId and agr.Price = a.Price
join Brand b on a.BrandId = b.BrandId

