我有这个数据库
我需要单价最高的产品行。我做了:
SELECT id, MAX(unitprice)
FROM product
GROUP BY id;
相反,它返回产品中的每一行。如果我这样做:
SELECT MAX(unitprice)
FROM product;
正如预期的那样,它返回了最大的价格。
我调查了这个(https://stackoverflow.com/questions/18957372/sql-max-product-price)和这个(https://stackoverflow.com/questions/12366390/how-to-select-product-that-具有每个类别的最大价格)线程,但我无法弄清楚。
帮助?
您链接的不同之处在于询问者想要每个特定字段的最大值(即 a 的聚合
GROUP BY
),您宁愿希望包含特定字段最大值的整行(即取由 an 排序的前 1 行总计的)。要实现您想要的,您需要使用窗口函数按
unitprice
字段对记录进行排序,然后过滤该结果集的前 1 个。这是实现此目的的示例查询:请注意,当您使用
ROW_NUMBER()
窗口函数时,如果ORDER BY
子句的逻辑存在关联,则关联记录之间的顺序是非确定性的(随机)。根据具体情况,这是可以的,或者如果不是,则需要在子句中添加一个唯一ORDER BY
字段作为后备(例如ORDER BY unitprice DESC, productid ASC
,导致在平局的情况下首先创建的产品获胜unitprice
。)