【发布时间】:2020-07-09 08:58:45
【问题描述】:
我需要找出每个月购买巧克力的顾客的巧克力销量百分比。 以下面的示例表为例,它只有一个 Month 条目:
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 年 1 月购买了巧克力的客户(Maria、Jose 和 Anne,但不是 Carlos)中,巧克力的总购买量(百分比)有多少?
通过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% 谢谢
【问题讨论】: