使用MAX和GROUP BY关联的子查询

时间:2012-11-21 19:26:45

标签: sql database ms-access group-by correlated-subquery

我有一个包含表格的数据库:车辆(蓝色本田思域价值3万美元),品牌(本田)和模型(思域)。

我正在尝试创建一个相关的子查询,它会为每个品牌中价格最高的汽车提供VEH_ID。

简单地说,我想知道所有汽车成本最高的品牌。

我已经附加了SQL即尝试的图片,但它不起作用。很可能是因为我不知道我在做什么。 enter image description here

SELECT 
BRAND.BRAND_ID, BRAND_NAME, VEHICLE.MODEL_ID, VEH_ID
FROM BRAND, MODEL, VEHICLE
WHERE VEH_PRICE = 
( 
SELECT MAX(VEH_PRICE)
FROM VEHICLE
)
GROUP BY BRAND.BRAND_ID, BRAND_NAME, VEHICLE.MODEL_ID, VEH_ID;

1 个答案:

答案 0 :(得分:1)

vehicles分组brandID表格创建新查询,以确定max(price)

SELECT brandID, MAX(VEH_PRICE)
FROM VEHICLE
group by brandID

然后创建另一个查询,使用第一个连接回vehicles的查询来确定相关的vehicleID

SELECT 
v.BRAND_ID, MODEL_ID, VEH_ID

FROM VEHICLE v inner join
(    SELECT brandID, MAX(VEH_PRICE) as max_veh_price
    FROM VEHICLE
    group by brandID) m on
v.brandid = m.brandid and
v.veh_price = m.max_veh_price

然后,要获得brand_name,请再次加入brand字段上的brandID表格,是的,如果max(price)返回多个广告系列,您将会必须与罗马建议的前1名一起使用。

抱歉,一开始无法读取您的图片。

是的,您需要将模型表加入车辆以获取brandID。我假设这是一个练习,你应该学习连接的结果?不要只是采取解决方案,然后逐个理解每一件。