基于标记筛选分组记录的实现方法咨询
分组筛选数据的解决方案
针对你需求的分组筛选逻辑,这里提供两种可行的SQL实现方法:
方法一:使用窗口函数(推荐)
利用ROW_NUMBER()窗口函数给每组内的记录排序,优先保留Col A为Y的记录:
WITH ranked_records AS ( SELECT ColA, ColB, -- 按ColB分组,ColA为Y的记录排第1位 ROW_NUMBER() OVER ( PARTITION BY ColB ORDER BY CASE WHEN ColA = 'Y' THEN 1 ELSE 2 END ) AS row_rank FROM your_table_name ) SELECT ColA, ColB FROM ranked_records WHERE row_rank = 1;
逻辑说明:
PARTITION BY ColB按ColB字段分组ORDER BY里通过CASE表达式把ColA='Y'的记录优先级设为最高,排在每组的第1位- 最后筛选
row_rank=1的记录,就能得到每组符合要求的唯一行
方法二:使用聚合函数
通过分组聚合直接判断并提取目标记录:
SELECT -- 组内有多条记录时取Y,否则取唯一的ColA值 CASE WHEN COUNT(*) > 1 THEN 'Y' ELSE MAX(ColA) END AS ColA, ColB FROM your_table_name GROUP BY ColB;
逻辑说明:
GROUP BY ColB按ColB分组- 用
COUNT(*)判断组内记录数量,大于1则直接返回Y;只有一条记录时,用MAX(ColA)(或MIN(ColA))提取唯一的ColA值
内容的提问来源于stack exchange,提问作者user20476629
相关产品推荐
相关产品推荐

