MySQL - Могу ли я объединить эти 2 оператора SQL? Объединить JOIN и AVG? - PullRequest
0 голосов
/ 27 октября 2009

Могу ли я объединить эти 2 оператора 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 

Ответы [ 2 ]

3 голосов
/ 27 октября 2009

Вы можете сделать это, используя 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

Обратите внимание, что это расширение MySQL для стандартного SQL ; в стандартном SQL вам нужно будет перечислить все выбранные поля в предложении group by.

1 голос
/ 27 октября 2009
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

Но представляет ли это улучшение или нет - это другой вопрос, на который лучше всего ответить, посмотрев, какой план запроса используется.

...