Как получить имя модели телефона?

Как получить список самых дорогих моделей телефонов каждого производителя? Сейчас выводит только id производителя и цену, не понимаю как получить имя модели

SELECT 
    companyId,
    max(price)
FROM phone
group by companyId;

введите сюда описание изображения


Ответы (1 шт):

Автор решения: ekochergin

Ваш вопрос следует бить на два:

  1. Как найти самую большую цену для каждого производителя (см. подзапрос или ваш вариант из вопроса)

  2. У каждого производителя найти телефон с ценой из предыдущего шага

Вот ответ.

select c.company_name, 
       p.phone_model,
       p.price
  from phone p
  join company c
    on p.company_id = c.company_id
 where p.price = (select max(price) 
                    from phone p1 
                   where p1.company_id = p.company_id)   
 order by c.company_name, 
          p.phone_model;

dbfiddle с моим примером.

В следующий раз, пожалста, добавьте к вопросу еще и тестовых данных, максимально похожих на продуктивные. Так выше шанс получить более подходящий под вашу ситуацию ответ

UPD. если у вас mySQL версии 8 и выше, можно воспользоваться CTE. Это сделает запрос, как минимум, более читаемым:

with max_prices as (
  select p.company_id, 
         c.company_name,
         max(p.price) max_price
    from phone p
    join company c
      on p.company_id = c.company_id
   group by company_id,
            company_name
)

select mp.*, 
       p.phone_model
  from max_prices mp
  join phone p
    on p.company_id = mp.company_id
   and p.price = mp.max_price;
→ Ссылка