2009-10-26 75 views
0

我可以合并这两个SQL语句吗?目前运行2个查询。试图收紧一点。MySQL - 我可以结合这两个SQL语句吗?结合JOIN和AVG?

第一招:

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 

回答

3

可以使用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子句中的所有选定字段。

1
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 

但不论这是否是一个进步是另一个问题,通过看到的是正在使用的查询计划的最好回答。