Сложность в построении SQL-запроса для Redshift - PullRequest
0 голосов
/ 22 ноября 2018

У меня нет большого опыта работы с SQL, и мне трудно построить запрос для следующей проблемы.

Допустим, у меня есть данные о продажах за месяц, как показано ниже, и они сохранены в Redshift

ProductId   Year    Month   Sales
A           2018    1       345
A           2018    2       3425
A           2018    3       56545
A           2018    4       234
A           2018    5       23
B           2018    1       645
B           2018    2       2324
B           2018    3       123
B           2018    4       700
B           2018    5       1410
....
....
....

Я хочу извлечь следующую информацию из таблицы выше.Запрос на простом английском языке выглядит следующим образом.

  1. Выберите продукт (по группам), где объем продаж превышает 800 за месяц 2018/3.Для этого запроса должны быть возвращены данные продукта «А» со значением продаж за месяц 2018/3

  2. Выберите продукт (сгруппировать по), для которого продажа месяца 2018/5 равна 100% больше чем 2018/4.Здесь сопоставляется только продукт "B", и в результат должны быть включены данные о продажах за оба месяца.

Редактировать: ожидаемый результат добавлен.

Для запроса 1

ProductId   Year    Month   Sales
A           2018    3       56545

Для запроса 2 (сгруппированный)

ProductId   Increase    Year    Month   Sales
B           101.42 %    2018    5       1410
                        2018    4       700

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Запрос 1: Выберите продукт с объемом продаж более 800 за месяц 2018 / 3.

SELECT
  productid,
  year,
  month,
  sales
FROM table
WHERE year = 2018
  AND month = 3
  AND sales > 800

Запрос 2: Выберите продукт, гдеПродажи месяца 2018/5 на 100% больше, чем 2018/4.

SELECT
  productid
  a.year as previous_month_year,
  a.month as previous_month,
  a.sales as previous_month_sales,
  b.year as year,
  b.month as month,
  b.sales as sales,
  to_char(100 * b.sales / a.sales,'999D99%') as increase
FROM table a
JOIN table b
WHERE a.year = 2018
  AND b.year = 2018
  AND a.month = 4
  AND b.month = 5
  AND b.sales > a.sales * 2
  AND a.productid = b.productid

Я не уверен, что вы подразумевали под "группировать по" в своих требованиях, так как агрегаты не требуются.

0 голосов
/ 22 ноября 2018

Вы можете попробовать ниже запросы

select * from tablename
where year=2018 and month=3 and and Sales>800

select * from tablename where year=2018 and month in (4,5)
and (case when year=2018 and month=5 then sales end)>(case when year=2018 and month=4 then sales end)*2
...