General SQL question using online SQLite editor, if I have the following 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 |
how would I get the output to be this:
| item | weeks | total_sales |
|---|---|---|
| item1 | 1-2 | 70 |
| item2 | 3-4 | 96 |
| item3 | 5 | 100 |
More specifically, how would I (if possible) show the week as a range (‘week 1-2‘ or even ‘week 1, 2‘) rather than just ‘week 1‘, where the range would be the week(s) that the item had the most sales for each week?
Some code I have been working on is as follows:
SELECT item,
SUM(sales) OVER (
PARTITION BY week order by item) AS total_sales
FROM TABLE1
GROUP BY item;
The above code gets me the sum or total sales for the week, but I am completely lost as to how one would get the week as a range.
Any help or clarification is appreciated. Example code
Advertisement
Answer
You can use a CASE expression to create the ranges and group by that expression and 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;
See the demo.