SQL — Продажи по категориям продуктов и группам по идентификатору клиента

#sql

Вопрос:

У меня есть 2 таблицы, таблицы продаж и таблица продуктов. Я пытаюсь запросить эти таблицы, чтобы получить общий объем продаж по категориям продуктов для каждого идентификатора клиента.

исключенный результат:

 | client_id    | hardware sales | software sales |
|  C109        | 300            | 0              | 150 * 2 and 0 * 0
|  C145        | 160            | 240            | 160 * 1 and 10 * 24
|  C160        | 500            | 0              | 500 * 1 and 0 * 0
 

продажи.sql

 | date      | order_id | client_id | product_id| product_price | quantity |
| 2020-01-02| A456     | C109      | 2546      | 150           | 2        |
| 2020-01-04| A457     | C145      | 2546      | 160           | 1        |
| 2020-01-04| A458     | C160      | 3000      | 500           | 1        |
| 2020-01-06| A459     | C145      | 8712      | 10            | 24       |
 

продукты.sql

 | product_id| product_type   | product_name   |
|  2546     | hardware       | keyboard       |
|  3000     | hardware       | screen         |
|  4445     | software       | video games    |
|  8712     | software       | malwarebytes   |
 

то, что я пытаюсь, но у меня слишком много времени, чтобы закончить:

 SELECT client_id FROM `sales` 
WHERE EXISTS (SELECT product_id      
FROM `products` 
WHERE 'product_id' = '4445')
GROUP BY client_id
 

Ответ №1:

Вы хотите join агрегацию и:

 select s.client_id,
       sum(case when product_type = 'hardware' then s.product_price * s.quantity else 0 end) hardware_sales,
       sum(case when product_type = 'software' then s.product_price * s.quantity else 0 end) software_sales
from sales s join
     products p
     on s.product_id = p.product_id
group by s.client_id ;
 

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

1. Удивительный Гордон Линофф