如何在SQL中使用分析函数基于ORDER、FLAG字段生成GRP分组列
实现方法
你需要的GRP列逻辑是按ORDER字段升序排序后,累计到当前行的FLAG为Y的总数量,用累加窗口函数就能直接实现,写法如下:
SELECT `ORDER`, FLAG, SUM(CASE WHEN FLAG = 'Y' THEN 1 ELSE 0 END) OVER (ORDER BY `ORDER` ASC) AS GRP FROM 你的实际表名
说明
- 先用CASE表达式做值转换:FLAG为Y时返回1,其余情况返回0,方便后续累加计数
- SUM()窗口函数指定按
ORDER从小到大排序的窗口,对转换后的数值做累计求和,结果和你示例中的GRP列完全匹配 ORDER是SQL保留关键字,查询时建议用反引号(MySQL生态)、双引号(PostgreSQL、Oracle等生态)包裹,避免语法报错- 以上是标准SQL写法,所有支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server、Oracle等)都可以直接运行
内容的提问来源于stack exchange,提问作者ezryder
相关产品推荐
相关产品推荐

