Chciałbym wykonać zapytanie na trzy stoły: schemat wygląda tak: (spójrz na DB-Fiddle) TB1: ID, Store_id, Product_Count ID Store_id Product_Count. ABC Store1 10. Def Store1 20. Ghi ...

0
Erin Liu 14 kwiecień 2021, 11:38

1 odpowiedź

Najlepsza odpowiedź

Spróbuj w ten sposób:

SELECT
  tb1.store_id,
  SUM(tb1.product_count) AS total_product_count,
  t.product_type_A_count,
  t.product_type_B_count
FROM tb1
  JOIN (
    SELECT
      tb1.store_id AS store_id,
      SUM(CASE WHEN tb2.product_type = 'A' THEN 1 ELSE 0 END) AS product_type_A_count,
      SUM(CASE WHEN tb2.product_type = 'B' THEN 1 ELSE 0 END) AS product_type_B_count
    FROM tb1
      JOIN tb3 ON tb1.id = tb3.tb1_id
      JOIN tb2 ON tb3.tb2_id = tb2.id
    GROUP BY store_id
  ) AS t ON tb1.store_id = t.store_id
GROUP BY tb1.store_id
;

(Możesz zobaczyć wynik w SQLFiddle)

Podzśnibość daje tylko store_id i całkowitą liczbę wszystkich produktów typu A i B w każdym sklepie. Następnie zapytanie zewnętrzne użyje bezpośrednio liczników w zapytaniu wewnętrznym i po prostu sumuj product_count na tb1. W ten sposób unikniesz tego duplikatów w tb2 i tb3 unieważni sumę na tb1.product_count.

0
Ma3x 14 kwiecień 2021, 15:14