【问题标题】:Correlated Sub queries using MAX and GROUP BY使用 MAX 和 GROUP BY 的相关子查询
【发布时间】:2012-11-21 19:26:44
【问题描述】:

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

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

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

我附上了一张图片,我正在尝试使用 SQL,但它不起作用。很可能是因为我不知道我在做什么。

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;

【问题讨论】:

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


    【解决方案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,再次加入brandID 字段中的brand 表,是的,如果max(price) 返回不止一辆车辆,您将不得不选择Top 1在罗马建议。

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

    是的,您需要将模型表加入车辆才能获得品牌 ID。我假设这是一个练习,因此您应该了解联接?不要只采取解决方案,然后,逐个理解每个部分。

    【讨论】:

    • 我正在使用 Access。我只能使用一个语句进行查询。
    • 如果您使用 Access,您可以创建任意数量的查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    相关资源
    最近更新 更多