SQLite查询如何对col1去重且优先保留col2为yes的行
SQLite 去重优先保留指定行解决方案
方案1:GROUP BY 极简写法(推荐)
利用 SQLite 字符串排序规则,"yes" 的字典序大于 "no",对 col1 分组后取 col2 的最大值即可优先拿到 yes 记录,完全匹配你的需求:
SELECT col1, MAX(col2) AS col2 FROM TABLE1 GROUP BY col1;
特点:写法简洁,查询性能高,无需依赖高版本 SQLite 特性。
方案2:窗口函数通用写法
如果后续优先级规则有调整(比如新增其他枚举值的优先级),可以用 ROW_NUMBER 窗口函数实现,要求 SQLite 版本 >= 3.25:
WITH ranked_data AS ( SELECT col1, col2, -- 按col1分组,自定义优先级排序,序号1为每组要保留的行 ROW_NUMBER() OVER ( PARTITION BY col1 ORDER BY CASE WHEN col2 = 'yes' THEN 1 ELSE 2 END ASC ) AS row_num FROM TABLE1 ) SELECT col1, col2 FROM ranked_data WHERE row_num = 1;
特点:扩展性强,可适配任意自定义优先级规则。
内容的提问来源于stack exchange,提问作者Alejandro Gonzalez
相关产品推荐
相关产品推荐

