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

SQL如何筛选列A值相同且列C值不同的全字段记录

SQL查询实现方案

核心逻辑为先识别出所有存在多个不同C值的A分组,再返回这些分组下的全部原始行,完整保留四个字段。

方案1:窗口函数实现(支持MySQL 8.0+、PostgreSQL、SQL Server、Oracle等主流数据库)

SELECT A, B, C, D
FROM (
    SELECT 
        *,
        COUNT(DISTINCT C) OVER (PARTITION BY A) AS distinct_c_count
    FROM 你的表名
) tmp
WHERE distinct_c_count > 1;

通过COUNT(DISTINCT C) OVER (PARTITION BY A)窗口函数,对每个A分组内的C去重计数,过滤掉计数为1的分组即可,不会丢失同分组下的任意行数据。

方案2:子查询关联实现(兼容低版本不支持窗口函数的数据库,如MySQL 5.x)

SELECT t1.A, t1.B, t1.C, t1.D
FROM 你的表名 t1
INNER JOIN (
    SELECT A
    FROM 你的表名
    GROUP BY A
    HAVING COUNT(DISTINCT C) > 1
) t2 ON t1.A = t2.A;

先通过子查询筛选出所有符合「同A下存在多个不同C」条件的A值,再关联原表获取这些A对应的全部行数据,执行效果和窗口函数方案完全一致。

示例运行结果

针对你提供的测试表,两种方案返回结果如下:

ABCD
a2b2c3d3
a2b2c4d3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:27:03