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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:14:04