Как свернуть общий объем продаж в MySQL?

#mysql #pivot #inner-join

Вопрос:

У меня есть три таблицы, которые приведены ниже

  1. регион (первичный ключ (region_id), внешний ключ (super_region_id), регион ссылок (region_id)) как
region_id название региона супер_регион_ид
101 Север Америка
102 США 101
103 Канада 101
104 США-Северо-восток 102
105 США-Юго-Восток 102
106 США-Запад 102
107 Мексика 101
  1. продукт (первичный ключ product_id, имя продукта) как
product_id имя продукта
1256 Шестерня-Большая
4437 Шестерня Маленькая
5567 Коленчатый вал
7684 Цепное колесо
  1. итоги продаж (целое число product_id, целое число region_id, целое число за год, целое число за месяц, целое число продаж, первичный ключ (идентификатор продукта, идентификатор региона, год, месяц), внешний ключ (идентификатор продукта) ссылается на продукт (идентификатор продукта), внешний ключ (идентификатор региона) ссылается на регион (идентификатор региона)) как
product_id region_id год месяц продажи
1256 103 2020 4 2200
1256 103 2020 10 1900
1256 104 2020 1 1000
1256 104 2020 7 1100
4437 105 2020 2 1200
4437 105 2020 8 1050
4437 107 2020 5 1700
4437 107 2020 11 1500
7684 104 2020 6 750
7684 104 2020 12 900
7684 106 2020 3 800
7684 106 2020 9 600

Мне нужно свернуть данные sales_totals так, чтобы для каждого из 4 продуктов был столбец, содержащий общий объем продаж за все месяцы 2020 года, который я пытался решить, используя как

 select p.product_name,sum(if (p.product_name = 'Gear-Large',st.sales,NULL) as total_sales_large_gear, sum(if (p.product_name = 'Gear Small',st.sales,null) as total_sales_small_gear, sum(if (p.product_name = 'Sprocket',st.sales,null) as total_sales_sprocket, sum(if (p.product_name = 'Crankshaft',st.sales,null)) as tot_sales_crankshafts from product p inner join sales_totals st on st.product_id = p.product_id group by p.product_name;  

но я получаю такую ошибку

 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as total_sales_large_gear, sum(if (p.product_name = 'Gear Small',st.sales,null) ' at line 1  

Результат должен отображаться в столбцах следующим образом
tot_sales_large_gears tot_sales_small_gears tot_sales_crankshafts tot_sales_sprockets

Комментарии:

1. Отсутствует ) , чтобы закрыть вызов функции sum() перед псевдонимом.

2. о!!! спасибо, парень, получил результат