MySQL - Posso combinar essas instruções SQL 2? Combine JOIN e média?
Pergunta
Posso combinar estas declarações 2 SQL? Atualmente em execução 2 consultas. Tentando apertar um pouco.
O primeiro:
SELECT * FROM (`cars`)
JOIN `brands` ON `brands`.`br_id` = `cars`.`brand_id`
WHERE `cars`.`id` = '185707'
Segundo um:
SELECT ROUND(AVG(rating)) as avg_rating
FROM car_ratings WHERE car_id = 185707
Solução
Você pode fazer isso usando 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
Note que esta é uma extensão do MySQL o padrão SQL ; em SQL padrão que você precisa para listar todos os campos selecionados na cláusula group by
.
Outras dicas
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
Mas se quer ou não que representa uma melhoria é outra questão, melhor respondida por ver o que consulta plano está sendo usado.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow