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 
Foi útil?

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
scroll top