Mysql 用于分析的销售表

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

早上好, 为了便于分析,我试图从sales表派生出一个表。 我在这些列中有数据:

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