SQL:如何将周列(即第 1 周、第 2 周等)中的值组合到周范围(第 1-2 周或第 1、2 周)?

SQL: How to combine values in column week (i.e. week 1, week 2, etc) into week range (week 1-2 or week 1, 2)?

一般SQL问题使用在线SQL站点编辑器,如果我有以下table:

item week sales
item1 1 35
item2 1 25
item3 1 24
item1 2 35
item2 2 34
item1 3 24
item2 3 45
item1 4 44
item2 4 51
item1 5 1
item3 5 100

我怎样才能得到这样的输出:

item weeks total_sales
item1 1-2 70
item2 3-4 96
item3 5 100

更具体地说,我(如果可能的话)如何将周显示为一个范围('第 1-2 周' 甚至'第 1、2 周') 而不仅仅是'第 1 周',其中的范围是商品每周销量最高的那几周?

我一直在做的一些代码如下:

SELECT item, 
    SUM(sales) OVER (
          PARTITION BY week order by item) AS total_sales
FROM TABLE1
GROUP BY item;

上面的代码得到了一周的总销售额或总销售额,但我完全不知道如何将一周作为一个范围。

如有任何帮助或说明,我们将不胜感激。 Example code

您可以使用 CASE 表达式创建范围,并按该表达式分组 item:

SELECT item,
       CASE 
         WHEN week <= 2 THEN '1-2'
         WHEN week <= 4 THEN '3-4'
         WHEN week <= 5 THEN '5'
         ELSE '>5'
       END weeks,
       SUM(sales) total_sales
FROM table1
GROUP BY item, weeks;

参见demo