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

如何用SQL筛选未包含Finance类型的Payment ID对应所有行

解决方案:筛选未包含Finance类型的Payment ID对应的所有行

原数据表

Payment IDType
123Fee
123Service
123Finance
456Fee
456Service

预期结果

Payment IDType
456Fee
456Service

实现SQL语句

以下提供几种常用实现方式,可根据数据库类型和数据规模选择:

方法1:NOT EXISTS子查询(推荐,性能更优)

检查当前行的Payment ID是否存在对应的Finance类型记录,不存在则保留该行:

SELECT t1.*
FROM your_table t1
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2."Payment ID" = t1."Payment ID"
      AND t2.Type = 'Finance'
);

方法2:NOT IN子查询

先找出所有包含Finance类型的Payment ID,再排除这些ID对应的所有行:

SELECT *
FROM your_table
WHERE "Payment ID" NOT IN (
    SELECT "Payment ID"
    FROM your_table
    WHERE Type = 'Finance'
);

注意:若子查询返回的Payment ID包含NULL值,NOT IN会导致结果为空,使用时需确保子查询结果无NULL。

方法3:窗口函数(适合大数据量场景)

通过窗口函数统计每个Payment ID下是否包含Finance类型,再筛选统计数为0的行:

SELECT "Payment ID", Type
FROM (
    SELECT *,
           COUNT(CASE WHEN Type = 'Finance' THEN 1 END) OVER (PARTITION BY "Payment ID") AS has_finance
    FROM your_table
) sub_query
WHERE has_finance = 0;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:15:23