SQL报告,其中包括销售代表,销售代表的状态以及YYY-MM排序的该销售代表状态的总销售额

时间:2018-07-15 13:30:01

标签: mysql sql mariadb

情况。我正在尝试制作一个报告,列出销售代表姓名(全部;共有50个),销售代表的状态以及按YYYY-表示该状态的MM。如果该州有两个或多个销售代表,则应为每个销售代表列出相同的州信息。只要包括所有信息,最终列表的排序方式无关紧要。

问题。除了我拥有的总数外,我还需要按州划分的总数。

这是我的代码:

 SELECT
    dim_sales_rep.sales_rep_name as 'Sales Rep',
    dim_state.abbreviation as 'State',
    date_format(dim_date.date, '%Y-%m') as 'Year-Month',
    concat('$',sum(fact_sales.total_sales)) as 'Sales'
FROM
    (
        (
            dim_sales_rep
        JOIN dim_state ON dim_sales_rep.state_key = dim_state.state_key
        )
    JOIN fact_sales ON dim_sales_rep.sales_rep_key = fact_sales.sales_rep_key
    )
JOIN dim_date ON fact_sales.date_key = dim_date.date_key
GROUP BY dim_date.year, dim_date.month, dim_state.abbreviation, dim_sales_rep.sales_rep_name

样本输出:

Rep             State       Year-Month      Sales
Michele Harris   GA          2010-08         $679.79
T.S. Eliot       GA          2010-07         $2938.74

它应该像这样:

Rep             State       Year-Month      Sales
Michele Harris   GA          2010-08         $679.79
Georgiana Woe    GA          2010-08         $482.98
State total                                  $1162.77

或者这样:

Rep             State      Year-Month      YM Total      State Total
Michaele Harris GA         2010-08         $679.79       $1162.77
Georgiana Woe   GA         2010-08         $482.98       $1162.77

这是数据结构:

  

表fact_sales

     

date_key(PK)代理密钥

     

account_key(PK)代理密钥

     

sales_rep_key(PK)代理密钥

     

total_sales总销售美元。

     

count_of_products产品销售数量

     

表格dim_state

     

state_key(PK)代理密钥

     

缩写,例如AL或CA

     

名称,例如加利福尼亚

     

表dim_account

     

account_key(PK)代理密钥

     

帐户名

     

帐户地址

     

state_key代理密钥

     

生效日期该记录有效的开始日期

     

expiration_date该记录有效的结束日期

     

is_current代表活动记录

     

表dim_sales_rep

     

sales_rep_key(PK)代理密钥

     

sales_rep_name

     

state_key代理密钥

     

生效日期该记录有效的开始日期

     

expiration_date该记录有效的结束日期

     

is_current代表活动记录

     

表格dim_date

     

date_key(PK)代理密钥日期,例如2011-01-01

     

个月,例如01

     

年,例如2011

注意:

PK:表示该列是表的主键或部分主键。

代理键以数字表示,不代表应用程序中的实际值。例如date_key可以是1,2,3,4,依此类推,并且不是真实日期。

假定dim_date包含所有时间的所有日期。

假定该列在不同的表中具有相同的名称,则它们是等效的。

1 个答案:

答案 0 :(得分:1)

仅按状态分组时,结果集中每个状态将获得一行。这就是GROUP BY的意思:汇总由其提及的列值细分的数据。

使用此:

GROUP BY dim_date.year, dim_date.month, dim_state.abbreviation, dim_sales_rep.sales_rep_name WITH ROLLUP

而且,使用MySQL的日期函数可以很好地格式化日期。

尝试一下:

SELECT DATE_FORMAT(STR_TO_DATE(CONCAT_WS('-',2014,3,1),'%Y-%m-%e'),'%Y-%m')