SQLite中如何从两列获取指定去重结果?DISTINCT语句无法满足需求
当然可以实现!
你的需求本质是对col1去重,同时为每个唯一的col1匹配对应的col2值(这里是每组里最小的col2),而SELECT DISTINCT col1, col2是对两列的组合去重,所以会保留所有col1+col2的唯一组合,自然达不到你的预期。
方法1:用GROUP BY结合聚合函数(最直接)
这是最适合你当前需求的方案,利用GROUP BY按col1分组,再用MIN()取每组里最小的col2值:
SELECT col1, MIN(col2) AS col2 FROM tab1 GROUP BY col1;
代入你的数据测试:
col1='a'的分组里,MIN(col2)是1;col1='b'的分组里,MIN(col2)是3;c和d各自只有一行,直接返回对应值,正好得到你想要的结果。
方法2:用窗口函数(更灵活,适合复杂场景)
如果你的需求后续有变化(比如想取每组的第一行、或者按其他规则筛选),SQLite 3.25.0及以上版本支持窗口函数,可以用ROW_NUMBER()实现:
WITH ranked_rows AS ( SELECT col1, col2, -- 按col1分组,每组内按col2排序,给行编号 ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2) AS rn FROM tab1 ) SELECT col1, col2 FROM ranked_rows WHERE rn = 1;
如果想按数据插入顺序取每组第一行,把ORDER BY col2改成ORDER BY rowid即可(SQLite默认表会有rowid列,除非创建表时指定了WITHOUT ROWID)。
内容的提问来源于stack exchange,提问作者user11532986
相关产品推荐
相关产品推荐

