Мне нужно найти процент проданных шоколадом покупателей, которые покупали шоколад по месяцам. Возьмем, к примеру, приведенный ниже пример таблицы с единственной записью месяца:
Cust_Id Customer Quantity Item Amount in $ Date Month and year
1 Maria 2 chocolate 10 01/01/2020 1-2020
1 Maria 1 banana 5 01/01/2020 1-2020
1 Maria 3 cookies 3 01/01/2020 1-2020
2 Carlos 5 cookies 10 01/01/2020 1-2020
2 Carlos 3 banana 3 01/01/2020 1-2020
3 Jose 1 banana 5 01/01/2020 1-2020
3 Jose 1 chocolate 3 01/01/2020 1-2020
4 Anne 10 chocolate 20 01/01/2020 1-2020
4 Anne 1 banana 5 01/01/2020 1-2020
4 Anne 10 cookies 15 01/01/2020 1-2020
Из тех покупателей, которые приобрели шоколад в январе 2020 года (Мария, Хосе и Анна, но НЕ Карлос ), сколько из общей суммы покупки (в%) было на шоколад?
Решение с помощью сводной таблицы в Excel:
Month 1 2020
Customer Name SUM of Amount in $ Total amount of purchase Overall %
Anne 20 40
Jose 3 8
Maria 10 18
Grand Total 33 66 50.00%
Решение для даты '1-2020': 50%
Как определить процент шоколадных конфет, проданных за период даты, только для клиентов, которые приобрели шоколад в этот период, с помощью SQL?
mysql> select * from orders where date = '1-2020';
+----------+-------------+---------------+----------+-----------+--------+--------+
| order_id | customer_id | customer_name | quantity | item | amount | date |
+----------+-------------+---------------+----------+-----------+--------+--------+
| 1 | 1 | Maria | 2 | chocolate | 10 | 1-2020 |
| 2 | 1 | Maria | 1 | banana | 5 | 1-2020 |
| 3 | 1 | Maria | 3 | cookies | 3 | 1-2020 |
| 4 | 2 | Carlos | 5 | cookies | 10 | 1-2020 |
| 5 | 2 | Carlos | 3 | banana | 3 | 1-2020 |
| 6 | 3 | Jose | 1 | banana | 5 | 1-2020 |
| 7 | 3 | Jose | 1 | chocolate | 3 | 1-2020 |
| 8 | 4 | Anne | 10 | chocolate | 20 | 1-2020 |
| 9 | 4 | Anne | 1 | banana | 5 | 1-2020 |
| 10 | 4 | Anne | 10 | cookies | 15 | 1-2020 |
+----------+-------------+---------------+----------+-----------+--------+--------+
10 rows in set (0.00 sec)
Приведенный ниже запрос почти верен, только он показывает, что общая сумма за январь составляет 79 долларов США, когда правильная сумма равна 66 долларам (в январе Карлос не покупал шоколад)
mysql> select date, sum(case when item = 'chocolate' then amount end) as chocolate_amount, sum(amount) as total_amount, (sum(case when item = 'chocolate' then amount end) / sum(amount)) as percentage from orders where date = '1-2020' group by date having sum(case when item = 'chocolate' then 1 else 0 end) > 0;
+--------+------------------+--------------+------------+
| date | chocolate_amount | total_amount | percentage |
+--------+------------------+--------------+------------+
| 1-2020 | 33 | 79 | 0.4177 |
+--------+------------------+--------------+------------+
1 row in set (0.00 sec)
Опять же, правильный расчет здесь будет быть 33/66 = 50% Спасибо