我想展示这个产品,它是最高奖项的(按制造商分组)。但是,如果两种产品都获得相同的奖励,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
);
答案 0 :(得分:1)
您似乎想要一个简单的子查询-外部查询中没有聚合:
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)
上。
答案 1 :(得分:1)
首先按制造商选择所有最高奖项组,然后加入主表:
b_mean[0] = 3 # (1+3+5)/3
b_mean[1] = 5 # (3+5+7)/3
b_mean[2] = 7 # (5+7+9)/3
请参见demo