SQL 查询以根据每月总和确定值

问题描述 投票:0回答:1

DB 小提琴在这里

我有如下表格;

CREATE TABLE cat (
    c_id int,
    c_date DATE,
    c_sit VARCHAR(3),
    c_value int,
    c_category VARCHAR(1)
);

具有以下数据:

c_id c_date c_sit c_value
147121 2022-06-06 25 4
147122 2022-06-06 23 3
147123 2022-06-07 25 5
147124 2022-11-23 25 1
147125 2022-11-16 25 3
147126 2023-10-08 25 2
147127 2023-10-09 25 5
147128 2022-04-14 25 4
147129 2022-04-15 25 6
147130 2022-04-16 25 1

column

c_category
为空,需要确定其值。我需要一个针对 REDSHIFT 的 SQL 查询,这样;

如果

c_sit='25'
和一个月的
c_value
之和 > 7,则该月的所有行将在 c_category 列中有 'a',否则在
c_category
列中有 'b'。

结果是;

(c_id, c_date, c_sit, c_value, c_category)
(147121,'2022-06-06','25',4,'a'),
(147122,'2022-06-06','23',3,''),
(147123,'2022-06-07','25',5,'a'),
(147124,'2022-11-23','25',1,'b'),
(147125,'2022-11-16','25',3,'b'),
(147126,'2023-10-08','25',2,'b'),
(147127,'2023-10-09','25',5,'b'),
(147128,'2022-04-14','25',4,'a'),
(147129,'2022-04-15','25',6,'a'),
(147130,'2022-04-16','25',1,'a');
sql amazon-redshift
1个回答
0
投票
UPDATE cat 
SET c_category = CASE 
                    WHEN c_sit = '25' AND 
                        SUM(c_value) OVER (PARTITION BY DATE_TRUNC('month', c_date)) > 7 
                        THEN 'a'
                    ELSE 'b'
                 END;

我使用了 UPDATE 将用于修改行的语句(在这种情况下是 c_category)。

CASE语句-它的作用是检查是否满足特定条件,如果满足则返回一个值。因此在这种情况下,它检查c_sit是否等于25以及一个月内的总和c_value大于 7,如果为真,则 c_category 等于 'a',否则为 'b'。

SUM 函数 - 它的目的是计算每个月的 c_value 总和,使用 PARTITION BY 按月对数据进行分组。

现在最后是 DATE_TRUNC 函数将 c_date 字段截断到月初,这样我们就可以按月分组了。

资源:

https://www.w3schools.com/sql/sql_case.asp

https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwjZprLq0_79AhWAhf0HHRvlDDUQFnoECAwQAQ&url=https%3A%2F%2Fmode.com%2Fblog%2Fdate-trunc-sql-timestamp-函数计数%2F&usg=AOvVaw2KqDuLQZdzsC4SyXchpBcu

© www.soinside.com 2019 - 2024. All rights reserved.