Mysql 使用子查询显示具有相同值的多个答案
我想展示这个有最高奖的产品(按制造商分组)。但是,如果两个产品拥有相同的奖项,SQL将向我展示其中的一个Mysql 使用子查询显示具有相同值的多个答案,mysql,sql,database,Mysql,Sql,Database,我想展示这个有最高奖的产品(按制造商分组)。但是,如果两个产品拥有相同的奖项,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.
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
);
您似乎想要一个简单的子查询--外部查询中没有聚合:
SELECT p.*
FROM products p
WHERE p.prize = (SELECT MAX(p2.prize)
FROM products p2
WHERE p2.manufacturer = p.manufacturer
);
如前一个问题所述,您使用的分组依据
不正确。在SELECT
中有未聚合的列,这些列不在分组依据中
在外部查询中使用聚合是每个制造商只能得到一行的原因
就性能而言,这通常是最快的方法——具有正确的索引。在本例中,正确的索引位于(制造商,奖品)
您似乎想要一个简单的子查询——外部查询中没有聚合:
SELECT p.*
FROM products p
WHERE p.prize = (SELECT MAX(p2.prize)
FROM products p2
WHERE p2.manufacturer = p.manufacturer
);
如前一个问题所述,您使用的分组依据
不正确。在SELECT
中有未聚合的列,这些列不在分组依据中
在外部查询中使用聚合是每个制造商只能得到一行的原因
就性能而言,这通常是最快的方法——具有正确的索引。在这种情况下,右索引位于(制造商,奖品)
首先选择maufacturer的所有最高奖品组,并连接到主表:
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
请参见首先选择maufacturer的所有最高奖项组并加入主表:
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
参见样本数据和期望结果将有所帮助。样本数据和期望结果将有所帮助。