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

SQL技术求助:基于B列最小值选择A列数据并保留重复行

解决思路与SQL方案

嘿,这个需求其实挺常见的,我给你两种实用的解决办法,不管是全局找B列最小值还是按A分组找,都能轻松保留所有重复行~

场景1:全局筛选B列最小值对应的所有行

如果你的需求是找出整个表中B列数值最小的所有行(就像你举的例子那样),最直接的写法就是用子查询先拿到B的全局最小值,再筛选匹配的行:

SELECT A, B
FROM your_table
WHERE B = (SELECT MIN(B) FROM your_table);

这个逻辑很清晰:先通过SELECT MIN(B) FROM your_table算出B列的最小值,然后把所有B等于这个值的行都挑出来,自然就保留了所有重复的符合条件的行,比如你的测试数据会返回那两个(4,5)。

场景2:按A分组,筛选每组中B列最小值的所有行

如果你的实际需求是每个A值对应的B列最小值的所有行(比如不同A各自找最小B的行),那用窗口函数会更灵活:

SELECT A, B
FROM (
    SELECT 
        A, 
        B,
        -- 按A分组,计算每组的B最小值
        MIN(B) OVER (PARTITION BY A) AS min_b_per_group
    FROM your_table
) AS temp
-- 筛选出当前行B等于组内最小值的记录
WHERE B = min_b_per_group;

举个例子,如果你的数据是(3,5),(3,4),(4,5),(4,5),(4,6),这个查询会返回(3,4),(4,5),(4,5),完美保留每个分组里的所有符合条件的重复行。

为什么这两种方案能保留重复行?

不管是子查询还是窗口函数的写法,我们都是直接匹配所有等于最小值的行,而不是用LIMIT或者只取唯一行的逻辑,所以只要有重复的符合条件的记录,都会被完整保留下来,完全符合你的需求~

内容的提问来源于stack exchange,提问作者Nikki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:41:05