我有两个表vehicles
和dealership_vehicles
。 dealership_vehicles
表具有价格列。 vehicles
表中的列dealership_vehicle_id
与dealership_vehicles
表中的dealership_vehicles
id列有关。
我只想退货最便宜的汽车。
为什么查询以下内容:
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查询。
答案 0 :(得分:1)
将术语“ GROUP BY”理解为“ for each”。就是说“给我每辆车的makeupship_vehicles.price的最小值。制造”
因此,您需要将查询更改为:
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;
答案 1 :(得分:1)
您说您想知道最便宜的汽车的品牌。最简单的方法是
SELECT DISTINCT v.MAKE
FROM VEHICLE v
INNER JOIN DEALERSHIP_VEHICLES dv
ON v.DEALERSHIP_VEHICLE_ID = dv.ID
WHERE dv.PRICE = (SELECT MIN(PRICE) FROM DEALERSHIP_VEHICLES);
请注意,由于多种车辆的价格可能是“最便宜的”,因此您完全有可能从上述查询中获得多次回报。
好运。
另一种方法是按照制造商的价格选择最低价格,然后按最低价格排序,然后仅取第一行。像
SELECT *
FROM (SELECT v.MAKE, MIN(dv.PRICE)
FROM VEHICLE v
INNER JOIN DEALERSHIP_VEHICLES dv
ON v.DEALERSHIP_VEHICLE_ID = dv.ID
GROUP BY v.MAKE
ORDER BY MIN(dv.PRICE) ASC)
WHERE ROWNUM = 1;
答案 2 :(得分:0)
如果您想要制造最便宜的汽车,则无需汇总:
select v.make, dv.price
from vehicles v inner join
dealership_vehicles dv
on v.dealership_vehicle_id = dv.id
order by dv.price asc
fetch first one row only;
如果要在平局的情况下需要所有行,这会变得更加复杂:
select v.*
from (select v.make, dv.price, rank() over (order by price asc) as seqnum
from vehicles v inner join
dealership_vehicles dv
on v.dealership_vehicle_id = dv.id
) v
where seqnum = 1
答案 3 :(得分:0)
因此,假设加入价格后,我们有下表(即存储在#temp表中):
#temp Vehicles table:
| Make | Model | Price |
|--------|-------|----------|
| Toyota | Yaris | 5000.00 |
| Toyota | Camry | 10000.00 |
| Ford | Focus | 7500.00 |
如果在不指定分组依据的情况下查询最低价格,则所有行仅应用一个最低功能。示例:
select min(Price) from #temp
将为您返回5000.00的单个值
如果您想知道最便宜的汽车的制造商,则需要以最便宜的价格过滤结果-这是一个两步过程。首先,您使用min找出最便宜的价格,然后在单独的查询中找出该价格下的哪些汽车。正确构建查询后,您会发现这揭示了您可能没有的东西-实际上,您可以拥有多个最便宜的商品。
示例表:
#temp Vehicles table v2:
| Make | Model | Price |
|--------|--------|----------|
| Toyota | Yaris | 5000.00 |
| Toyota | Camry | 10000.00 |
| Ford | Focus | 7500.00 |
| Ford | Escort | 5000.00 |
查询:
select * from #temp
where Price = (select min(Price) from #temp)
结果:
| Make | Model | Price |
|--------|--------|----------|
| Toyota | Yaris | 5000.00 |
| Ford | Escort | 5000.00 |