You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询最贵商品报expression not in aggregate or GROUP BY columns问题问询

报错原因解析

当SQL查询中使用MAX()这类聚合函数且未声明GROUP BY子句时,数据库引擎会将整个表视为一个分组计算聚合结果。此时你在SELECT列表中写入的ProductID、ProductName、CategoryID不属于聚合函数计算结果,也没有被加入GROUP BY子句,引擎无法确定该返回这些字段对应哪一行的取值,因此会抛出expression not in aggregate or GROUP BY columns异常。
你之前对SQL规则的理解存在偏差:仅查询聚合函数结果(例如只写SELECT MAX(Price) FROM Products)是符合规则的,但同时查询非聚合的普通字段时,必须满足「所有非聚合字段都出现在GROUP BY子句中」的要求。

正确的查询实现

你的需求是查询全表最高价对应的商品明细,本身不需要用到GROUP BY,可以用以下两种通用写法实现:

子查询匹配法(兼容所有SQL版本)

SELECT ProductID, ProductName, Price, CategoryID 
FROM Products 
WHERE Price = (SELECT MAX(Price) FROM Products);

该写法会返回所有价格等于全表最高价的商品记录,符合你的需求。

窗口函数法(兼容支持窗口函数的SQL版本,如MySQL8.0+、PostgreSQL、SQL Server等)

SELECT ProductID, ProductName, Price, CategoryID
FROM (
    SELECT *,
           RANK() OVER (ORDER BY Price DESC) AS price_rank
    FROM Products
) AS ranked_products
WHERE price_rank = 1;

如果存在多个最高价商品,该写法同样会返回全部匹配记录。

补充说明

你不需要为了这个需求强制使用GROUP BY,之前的报错是因为聚合函数和非聚合字段的混写不符合SQL语法规范,而非需求本身需要分组统计。

内容的提问来源于stack exchange,提问作者Modern

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:24:01