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

如何在SQL中从指定表中选取唯一行?(附示例表与预期结果)

如何在SQL中从表中选取唯一行

假设你的表名为price_ranges,先来看原始数据:

MinimumMaximumPrice
0.0001.00050.000
0.1001.00060.000
1.1002.00060.000
1.0002.00060.000

从你给出的预期结果来看,核心需求是针对相同价格组,保留范围更精准(也就是起始值更大)的行,同时保留价格唯一的行。下面提供两种实用的实现方案:

方法1:使用窗口函数(适配大部分现代SQL数据库)

如果你的数据库支持窗口函数(比如PostgreSQL、MySQL 8.0+、SQL Server等),可以用ROW_NUMBER()来快速筛选目标行:

SELECT Minimum, Maximum, Price
FROM (
    SELECT 
        Minimum, 
        Maximum, 
        Price,
        -- 按价格和最大值分组,每组内按起始值倒序排序
        ROW_NUMBER() OVER (
            PARTITION BY Price, Maximum 
            ORDER BY Minimum DESC
        ) AS row_rank
    FROM price_ranges
) ranked_ranges
WHERE row_rank = 1;

这个查询的逻辑很直观:

  • 把相同Price和Maximum的行归为一组
  • 每组内按Minimum从大到小排序,给行打排名
  • 只保留每组的第1行,也就是该组里起始值最大的行,刚好符合你的预期输出

方法2:使用关联查询(兼容旧版SQL数据库)

如果你的数据库不支持窗口函数,用关联查询也能实现同样的效果:

SELECT pr1.Minimum, pr1.Maximum, pr1.Price
FROM price_ranges pr1
LEFT JOIN price_ranges pr2
    ON pr1.Price = pr2.Price
    AND pr1.Maximum = pr2.Maximum
    AND pr2.Minimum > pr1.Minimum
WHERE pr2.Minimum IS NULL;

这个思路是:

  • 自关联表,寻找同价格、同最大值,但起始值更大的行
  • 如果找不到这样的行,说明当前行就是该组里起始值最大的,直接保留它

最终执行结果

不管用哪种方法,都会得到你想要的唯一行结果:

MinimumMaximumPrice
0.0001.00050.000
1.1002.00060.000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:42:12