如何运用SQL的MAX和MIN函数在报表中高效查询数据最大值和最小值?
- 内容介绍
- 相关推荐
本文共计721个文字,预计阅读时间需要3分钟。
直接说结论:
为什么 SELECT MAX(price), name FROM products 会报错?
因为 MAX() 是聚合函数,而 name 是非聚合字段。SQL 引擎无法确定你想要哪一行的 name —— 是价格最高那行的?还是随便一行的?不同数据库行为不一(MySQL 5.7+ 默认拒绝,PostgreSQL/SQL Server 直接报错)。
常见错误现象:ERROR: column "products.name" must appear in the GROUP BY clause or be used in an aggregate function
- 正确做法:要么加
GROUP BY,要么用子查询/窗口函数定位整行 - 如果真只想查“最贵商品的名字和价格”,该用
ORDER BY price DESC LIMIT 1,而不是硬套MAX() - 报表中常误以为“带 MAX 就能自动关联其他字段”,这是最大认知偏差
报表里怎么安全地显示“各分类最高价 + 对应商品名”?
不能靠 MAX(price), name GROUP BY category —— name 值是随机的(即使 MySQL 允许,也不保证是最高价那条)。得用窗口函数或关联子查询。
本文共计721个文字,预计阅读时间需要3分钟。
直接说结论:
为什么 SELECT MAX(price), name FROM products 会报错?
因为 MAX() 是聚合函数,而 name 是非聚合字段。SQL 引擎无法确定你想要哪一行的 name —— 是价格最高那行的?还是随便一行的?不同数据库行为不一(MySQL 5.7+ 默认拒绝,PostgreSQL/SQL Server 直接报错)。
常见错误现象:ERROR: column "products.name" must appear in the GROUP BY clause or be used in an aggregate function
- 正确做法:要么加
GROUP BY,要么用子查询/窗口函数定位整行 - 如果真只想查“最贵商品的名字和价格”,该用
ORDER BY price DESC LIMIT 1,而不是硬套MAX() - 报表中常误以为“带 MAX 就能自动关联其他字段”,这是最大认知偏差
报表里怎么安全地显示“各分类最高价 + 对应商品名”?
不能靠 MAX(price), name GROUP BY category —— name 值是随机的(即使 MySQL 允许,也不保证是最高价那条)。得用窗口函数或关联子查询。

