Mysql 用于分析的销售表
早上好, 为了便于分析,我试图从sales表派生出一个表。 我在这些列中有数据:Mysql 用于分析的销售表,mysql,Mysql,早上好, 为了便于分析,我试图从sales表派生出一个表。 我在这些列中有数据: date | product_id | product_price | category 我希望输出为: month | category1_quantity | category1_sales | category1_%_of_month_sales | category2_quantity.....category4_%_of_month_sales 我是mysql新手,您能帮我吗?假设您的原始表名为sal
date | product_id | product_price | category
我希望输出为:
month | category1_quantity | category1_sales | category1_%_of_month_sales | category2_quantity.....category4_%_of_month_sales
我是mysql新手,您能帮我吗?假设您的原始表名为sales,可能是这样的: 我在原始数据集中添加了一个计算列month,然后根据它进行分组。 百分比指标需要两个不同的分组month、category和month,我将它们合并在一起 为了将该查询的输出转换为您指定的格式,您必须执行以下繁琐的操作:
select month
,sum(category1_quantity) as category1_quantity
,sum(category1_sales) as category1_sales
,sum(category1_month_sales_pct) as category1_month_sales_pct
,sum(category2_quantity) as category2_quantity
,sum(category2_sales) as category2_sales
,sum(category2_month_sales_pct) as category2_month_sales_pct
-- and so on for each category
from
(select month
,case when category = 'category1' then quantity else 0 end as category1_quantity
,case when category = 'category1' then sales else 0 end as category1_sales
,case when category = 'category1' then month_sales_pct else 0 end as category1_month_sales_pct
,case when category = 'category2' then quantity else 0 end as category2_quantity
,case when category = 'category3' then sales else 0 end as category2_sales
,case when category = 'category4' then month_sales_pct else 0 end as category2_month_sales_pct
-- and so on for each category
from (<insert the previous query here>) unpivoted_summary)pivoted
group by month
欢迎来到SO。看:嗨@sonam_zangmo,谢谢你的帮助!第一部分运行平稳,而第二部分遇到问题。它每列返回0。您可以发布销售数据的示例吗?您的实际类别值是否与内部子查询中的stings匹配?e、 g.“category1”从您建议的编辑Pietro中,我看到您通过插入实际类别值“包装”、“膳食”、“饮料”、“零食”实现了这一功能。然而,我将保持我的答案的通用性,并与您最初的问题保持一致。
select month
,sum(category1_quantity) as category1_quantity
,sum(category1_sales) as category1_sales
,sum(category1_month_sales_pct) as category1_month_sales_pct
,sum(category2_quantity) as category2_quantity
,sum(category2_sales) as category2_sales
,sum(category2_month_sales_pct) as category2_month_sales_pct
-- and so on for each category
from
(select month
,case when category = 'category1' then quantity else 0 end as category1_quantity
,case when category = 'category1' then sales else 0 end as category1_sales
,case when category = 'category1' then month_sales_pct else 0 end as category1_month_sales_pct
,case when category = 'category2' then quantity else 0 end as category2_quantity
,case when category = 'category3' then sales else 0 end as category2_sales
,case when category = 'category4' then month_sales_pct else 0 end as category2_month_sales_pct
-- and so on for each category
from (<insert the previous query here>) unpivoted_summary)pivoted
group by month