【问题标题】:MySQL - Can I combine these 2 SQL statements? Combine JOIN and AVG?MySQL - 我可以组合这 2 个 SQL 语句吗?结合 JOIN 和 AVG?
【发布时间】:2009-10-26 21:57:02
【问题描述】:

我可以合并这两条 SQL 语句吗?当前运行 2 个查询。试着收紧一点。

第一个:

SELECT * FROM (`cars`) 
JOIN `brands` ON `brands`.`br_id` = `cars`.`brand_id`
WHERE `cars`.`id` = '185707'

第二个:

SELECT ROUND(AVG(rating)) as avg_rating
FROM car_ratings WHERE car_id = 185707 

【问题讨论】:

    标签: sql mysql join average


    【解决方案1】:

    您可以使用group by

    select cars.*,
           brands.*, 
           round(avg(car_ratings.rating)) as avg_rating
    from   (cars
        inner join brands on brands.br_id = cars.brand_id)
        left join car_ratings on car_ratings.car_id = cars.id
    where  cars.id = 185707
    group by cars.id
    

    注意this is a MySQL extension to standard SQL;在标准 SQL 中,您需要在 group by 子句中列出所有选定的字段。

    【讨论】:

      【解决方案2】:
      select *
      
      , (select round(avg(rating)) from car_ratings 
      where car_id = cars.id) as avg_rating
      
      from cars join brands on brands.br_id = cars.brand_id
      where cars.id = 185707
      

      但这是否代表改进是另一个问题,最好通过查看正在使用的查询计划来回答。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-21
        • 1970-01-01
        • 2016-09-26
        相关资源
        最近更新 更多