我开始学习SQL,并且有了下面的表格(它们包含了更多的数据,但只有对问题来说是必要的)。
项目:
item_keys deparment_desc
----------------------------
10001 Womens Clothing
10002 Womens Clothing
10003 Sporting Goods
销售额:
cur_trn_date item_key store_key tot_sls_qty
----------------------------------------------
1999-12-01 10001 1 8346.17
1999-12-01 10001 2 235.40
.
.
.
2001-12-31 2001-12-31 10 1108.33
商店:
store_key type_key type_desc
--------------------------------
1 1 Super Malls
2 2 Strip Malls
3 3 Retail Only
.
.
.
10 1 Super Malls
(很抱歉,如果这看起来不是很结构化,我找不到在StackOverflow中创建表的方法)
我想要得到的是每一年的总销售额以及去年的百分比变化。以上就是department_desc和type_desc的所有可能组合。我用下面的代码尝试了一下,但是立方体和LAG函数似乎有问题。它们是意想不到的象征。
SELECT YEAR(s.cur_trn_date) AS year, SUM(s.tot_sls_qty) AS sales,
(SUM(s.tot_sls_qty) - LAG(SUM(s.tot_sls_qty)) / SUM(s.tot_sls_qty)) AS difference
FROM sales s, item i, store st
GROUP BY YEAR(s.cur_trn_date)
CUBE(i.departmend_desc, st.type_desc)
WHERE s.item_key = i.item_key
AND s.store_key = st.store_key
如果有人能帮上忙,或者给我一个关于这个问题的线索,那就太好了。
发布于 2020-01-20 12:41:38
根据您的描述,查询应该是:
SELECT YEAR(s.cur_trn_date) AS year,
SUM(s.tot_sls_qty) AS sales,
(SUM(s.tot_sls_qty) - LAG(SUM(s.tot_sls_qty)) /
SUM(s.tot_sls_qty)
) AS difference
FROM sales s JOIN
item i
ON s.item_key = i.item_key JOIN
store st
ON s.store_key = st.store_key
GROUP BY GROUPING_SETS ( (YEAR(s.cur_trn_date)),
(YEAR(s.cur_trn_date), i.departmend_desc, st.type_desc),
(YEAR(s.cur_trn_date), i.departmend_desc),
(YEAR(s.cur_trn_date), st.type_desc)
);
我不确定是否有一个可以实际运行的语法可以解决你的问题。(与cube
相比,我更喜欢grouping sets
,因为我喜欢对所产生的结果进行明确描述。)
https://stackoverflow.com/questions/59821314
复制相似问题