难以为 Redshift 构造 SQL 查询
Difficulty in constructing SQL query for Redshift
我在 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
....
....
....
我想从上面的table中提取以下信息。简单英语的查询如下所示。
Select 2018/3 月销售额大于 800 的产品(分组依据)。对于此查询,产品 "A" 数据应与 2018/3
月份的销售额一起返回
Select 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
您可以尝试以下查询
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:Select2018/3月销售额大于800的产品。
SELECT
productid,
year,
month,
sales
FROM table
WHERE year = 2018
AND month = 3
AND sales > 800
查询 2: Select 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
我不确定您的要求中的 "group by" 是什么意思,因为不需要聚合。
我在 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
....
....
....
我想从上面的table中提取以下信息。简单英语的查询如下所示。
Select 2018/3 月销售额大于 800 的产品(分组依据)。对于此查询,产品 "A" 数据应与 2018/3
月份的销售额一起返回
Select 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
您可以尝试以下查询
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:Select2018/3月销售额大于800的产品。
SELECT
productid,
year,
month,
sales
FROM table
WHERE year = 2018
AND month = 3
AND sales > 800
查询 2: Select 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
我不确定您的要求中的 "group by" 是什么意思,因为不需要聚合。