Mysql
 sql >> база данни >  >> RDS >> Mysql

Две леви обединявания ми дават неверни данни (двойни данни?) с MySQL

Проблемът е, че product_reviews и таблицата с поръчки може да има повече от един ред на идентификатор на продукт. Един от начините да поправите това е да използвате подзаявка:

SELECT `products`.*, 
  o.revenue,
  o.qty, 
  ROUND(avg_stars) as avg_stars 
FROM `products` 
LEFT JOIN
(
  select `product_id`, 
    sum(total_count) revenue,
    sum(quantity) qty
  from `orders`
  where `status` in ('delivered', 'new')
  group by `product_id`
) o
  ON `products`.`id` = o.`product_id`
LEFT JOIN
(
  select product_id, avg(stars) avg_stars
  from product_reviews
  group by product_id
) pr
    ON (products.id = pr.product_id)
ORDER BY products.ID DESC
LIMIT 10
OFFSET 0


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да поставите ред отгоре в mysql заявка.

  2. PHP PDO и MySQLi

  3. Изберете отделни записи за присъединяване

  4. Преобразуване от ред в колона от различни таблици и различен брой редове (обединение) в MySQL версия 8.0.17 с помощта на Pivot

  5. MYSQL:Можете ли да извлечете резултати, които съвпадат като 3 от 4 израза?