You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于月度求和的Redshift SQL查询:填充c_category字段

为Redshift编写SQL实现分类字段赋值

表结构

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

现有数据

c_idc_datec_sitc_value
1471212022-06-06254
1471222022-06-06233
1471232022-06-07255
1471242022-11-23251
1471252022-11-16253
1471262023-10-08252
1471272023-10-09255
1471282022-04-14254
1471292022-04-15256
1471302022-04-16251

当前c_category字段值为空,需实现以下规则:

  • 当c_sit='25'时,若该行所属月度的c_value总和大于7,则该月所有对应行的c_category赋值为'a',否则赋值为'b';
  • c_sit不为25的行,c_category保持为空。

期望结果

(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');

解决方案

查询结果生成

通过窗口函数按月度+c_sit汇总数值,再根据条件判断赋值:

SELECT 
    c_id,
    c_date,
    c_sit,
    c_value,
    CASE 
        WHEN c_sit != '25' THEN ''
        WHEN SUM(c_value) OVER (PARTITION BY DATE_TRUNC('month', c_date), c_sit) > 7 THEN 'a'
        ELSE 'b'
    END AS c_category
FROM cat;

更新表字段

如果需要直接更新表中的c_category字段,使用关联子查询的UPDATE语句:

UPDATE cat
SET c_category = sub.category
FROM (
    SELECT 
        c_id,
        CASE 
            WHEN c_sit != '25' THEN ''
            WHEN SUM(c_value) OVER (PARTITION BY DATE_TRUNC('month', c_date), c_sit) > 7 THEN 'a'
            ELSE 'b'
        END AS category
    FROM cat
) sub
WHERE cat.c_id = sub.c_id;

内容的提问来源于stack exchange,提问作者khawarizmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:15:41