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;
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;
您的问题应分为两部分:
如何找到每个制造商的最高价格(请参阅子查询或问题的变体)
对于每个制造商,找到具有上一步价格的手机
这是答案。
dbfiddle与我的示例。
下一次,请在问题中添加测试数据,尽可能接近生产性数据。因此,您更有可能获得更适合您的情况的答案。
UPD。如果你有 mySQL 8 或更高版本,你可以使用 CTE。这将使查询至少更具可读性: