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。
一般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。