【问题标题】:SQL: percantage change for all possible combinationsSQL:所有可能组合的百分比变化
【发布时间】:2020-01-20 10:27:03
【问题描述】:

我开始学习 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 的所有可能组合,所有这些。我使用以下代码进行了尝试,但 CUBE 和 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

如果有人可以提供帮助或给我一个线索来了解问题可能是什么,那就太好了。

【问题讨论】:

  • 今日提示:始终使用现代、明确的 JOIN 语法。更容易编写(没有错误),更容易阅读(和维护),并且如果需要更容易转换为外连接。
  • WHEREGROUP BY 之前。
  • "我找不到在 StackOverflow 上创建表格的方法" - 请参阅 here 了解有关如何创建漂亮表格的一些技巧。

标签: sql lag cube


【解决方案1】:

根据您的描述,查询应该是:

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,因为我喜欢明确说明所产生的结果。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    相关资源
    最近更新 更多