情况。我正在尝试制作一个报告,列出销售代表姓名(全部;共有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包含所有时间的所有日期。
假定该列在不同的表中具有相同的名称,则它们是等效的。
答案 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')