难以为Redshift构建SQL查询

时间:2018-11-22 04:42:45

标签: sql amazon-redshift aggregation

我在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. 选择2018/3月份销售额大于800的产品(分组依据)。对于此查询,应返回产品“ A”数据以及2018/3月份的销售值

  2. 选择2018/5月份的销售额比2018/4个月大100%的产品(分组依据)。这里只有匹配的产品“ 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 :(得分:1)

您可以尝试以下查询

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

答案 1 :(得分:1)

查询1:选择2018/3月份销售额大于800的产品。

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

查询2:选择2018/5月份的销售额比2018/4销售额大100%的产品。

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

我不确定您的要求中“分组依据”是什么意思,因为不需要汇总。