使用子查询显示具有相同值的多个答案

cgfeq70w  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(294)

我想展示这个产品,其中有最高奖(集团由制造商)。但是如果两个产品有相同的奖励,sql会显示其中一个。

SELECT name, manufacturer, MAX(prize)
FROM products p
GROUP BY manufacturer
HAVING MAX(prize) = (SELECT MAX(p1.prize)
                  FROM products p1
                  WHERE p.manufacturer = p1.manufacturer
                  LIMIT 1
                 );
az31mfrm

az31mfrm1#

首先选择maufacturer的所有max奖品组并加入主表:

select p.* from
(select manufacturer, MAX(prize) AS maxprize from products GROUP BY manufacturer) AS m
inner join products p
on m.manufacturer = p.manufacturer and m.maxprize = p.prize
order by p.manufacturer, p.name

请参见演示

bzzcjhmw

bzzcjhmw2#

您似乎想要一个简单的子查询--外部查询中没有聚合:

SELECT p.*
FROM products p
WHERE p.prize = (SELECT MAX(p2.prize)
                 FROM products p2
                 WHERE p2.manufacturer = p.manufacturer
                );

正如你在上一个问题中提到的,你对 GROUP BY 不正确。列表中有未聚合的列 SELECT 那些不在 GROUP BY .
在外部查询中使用聚合是每个制造商只能得到一行的原因。
就性能而言,这通常是最快的方法——有正确的索引。在本例中,右索引处于启用状态 (manufacturer, prize) .

相关问题