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

如何用SQL为分组结果生成tot_cust标识列(同id_首行1其余0)

用CASE WHEN实现分组首行标记需求的方案

完全可以通过CASE WHEN结合窗口函数实现这个需求。核心思路是先通过窗口函数给每个id_分组内的行标记序号,再用CASE WHEN判断序号是否为1来赋值tot_cust。

实现代码

基于你原有的分组查询,修改后的SQL如下(以CTE写法为例,可读性更强):

WITH grouped_data AS (
    SELECT id_, product, sum(price) AS total  
    FROM example     
    GROUP BY id_, product  
    ORDER BY id_, product
)
SELECT 
    id_,
    product,
    total,
    CASE 
        WHEN ROW_NUMBER() OVER (PARTITION BY id_ ORDER BY product) = 1 THEN 1
        ELSE 0
    END AS tot_cust
FROM grouped_data
ORDER BY id_, product;

如果你的SQL环境不支持CTE,也可以用子查询嵌套:

SELECT 
    id_,
    product,
    total,
    CASE 
        WHEN ROW_NUMBER() OVER (PARTITION BY id_ ORDER BY product) = 1 THEN 1
        ELSE 0
    END AS tot_cust
FROM (
    SELECT id_, product, sum(price) AS total  
    FROM example     
    GROUP BY id_, product  
    ORDER BY id_, product
) AS sub_query
ORDER BY id_, product;

逻辑说明

  1. ROW_NUMBER() OVER (PARTITION BY id_ ORDER BY product):按id_分组,每组内按product排序(和原查询的排序规则一致,确保首行是你预期的第一行),给每行分配一个唯一序号。
  2. CASE WHEN判断:当序号为1时,tot_cust赋值为1,其余行赋值为0,完美匹配你要求的“同一id_对应的首行值为1,其余行值为0”规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:25:37