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

SQL按Id2分组新增Flag列 最小Id行赋0其余行赋1

需求实现方法

你之前用GROUP BY没成功是正常的:GROUP BY的逻辑是把同组多行数据聚合为单条结果,没法保留原表所有明细行,自然没法给每一行单独赋值标记。

通用写法(支持窗口函数的SQL环境:MySQL8.0+、PostgreSQL、SQL Server、Hive、SparkSQL等)

直接用窗口函数在不折叠行的前提下完成分组内最小值计算,写法最简洁:

SELECT
  Id,
  Prod,
  Id2,
  CASE WHEN Id = MIN(Id) OVER (PARTITION BY Id2) THEN 0 ELSE 1 END AS Flag
FROM 你的表名;

核心逻辑:

  • 用PARTITION BY Id2指定按Id2字段分组,不折叠原表行
  • 计算每个分组内的最小Id值
  • 当前行Id等于组内最小Id时Flag赋值0,其余行赋值1

兼容老版本SQL的写法(比如MySQL5.x不支持窗口函数的场景)

先通过GROUP BY算出每个Id2组对应的最小Id,再和原表关联打标:

SELECT
  t1.Id,
  t1.Prod,
  t1.Id2,
  CASE WHEN t1.Id = t2.min_id THEN 0 ELSE 1 END AS Flag
FROM 你的表名 t1
LEFT JOIN (
  SELECT Id2, MIN(Id) AS min_id
  FROM 你的表名
  GROUP BY Id2
) t2 ON t1.Id2 = t2.Id2;

以上两种写法运行后的输出和你给出的预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:09:34