首页 > 解决方案 > 为什么在使用 MIN 函数并选择另一列时,我们需要 GROUP BY 子句?MIN 不返回单个记录吗?

问题描述

我有两张桌子vehiclesdealership_vehicles. 该dealership_vehicles表有一个价格列。该vehicles表有一列dealership_vehicle_id与表中的dealership_vehiclesid 列相关dealership_vehicles

我只想退回最便宜的汽车制造商。

为什么会出现以下查询:

select 
    vehicles.make, 
    MIN(dealership_vehicles.price) 
from 
    vehicles inner join dealership_vehicles 
    on vehicles.dealership_vehicle_id=dealership_vehicles.id;

返回错误:

column "vehicles.make" must appear in the GROUP BY clause or be used in an aggregate function

由于 MIN 函数返回单个值,因此可以构造返回单个值而不需要 GROUP BY 的 SQL 查询是合理的。

标签: sqlpostgresql

解决方案


将“GROUP BY”一词视为“每个人”。它的意思是“给我每辆车的dealership_vehicles.price.make的最小值”

因此,您需要将查询更改为:

select 
    vehicles.make, 
    MIN(dealership_vehicles.price) 
from 
    vehicles inner join dealership_vehicles 
    on vehicles.dealership_vehicle_id=dealership_vehicles.id
Group by vehicles.make;

推荐阅读