我想展示这个产品,其中有最高奖(集团由制造商)。但是如果两个产品有相同的奖励,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
);
2条答案
按热度按时间az31mfrm1#
首先选择maufacturer的所有max奖品组并加入主表:
请参见演示
bzzcjhmw2#
您似乎想要一个简单的子查询--外部查询中没有聚合:
正如你在上一个问题中提到的,你对
GROUP BY
不正确。列表中有未聚合的列SELECT
那些不在GROUP BY
.在外部查询中使用聚合是每个制造商只能得到一行的原因。
就性能而言,这通常是最快的方法——有正确的索引。在本例中,右索引处于启用状态
(manufacturer, prize)
.