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

时间:2018-12-27 13:30:33

标签: 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.manufacturer
                  LIMIT 1
                 );

2 个答案:

答案 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