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

如何查询指定条件下某列值唯一的完整数据行?

获取某列值唯一的完整数据行解决方案

示例数据表

col1col2col3
value 1value 2value 3
value 1value 2value 3
value avalue bvalue c
value avalue xvalue c
value 1value bvalue c

问题分析

你现在用的SQL通过GROUP BY col2聚合后,只能返回分组的col2和计数,没法直接拿到完整的行数据。要获取整行,得先筛选出符合条件的col2值,再关联回原表,或者用窗口函数直接标记目标行。

解决方案

方法1:子查询筛选目标col2后关联原表

先找出col3='value c'且仅出现一次的col2值,再用这些值匹配原表拿到完整行:

SELECT t.*
FROM the_table t
WHERE t.col3 = 'value c'
AND t.col2 IN (
    SELECT col2
    FROM the_table
    WHERE col3 = 'value c'
    GROUP BY col2
    HAVING COUNT(col2) = 1
);

方法2:窗口函数(推荐,支持MySQL 8+、PostgreSQL、SQL Server等)

用COUNT() OVER()窗口函数计算每个col2在col3='value c'范围内的出现次数,直接筛选次数为1的行:

SELECT col1, col2, col3
FROM (
    SELECT 
        *,
        COUNT(col2) OVER (PARTITION BY col2) AS col2_count
    FROM the_table
    WHERE col3 = 'value c'
) AS sub
WHERE col2_count = 1;

方法3:EXISTS子查询

通过EXISTS判断当前行的col2在col3='value c'的范围内是否只有唯一一行:

SELECT t1.*
FROM the_table t1
WHERE t1.col3 = 'value c'
AND NOT EXISTS (
    SELECT 1
    FROM the_table t2
    WHERE t2.col3 = 'value c'
    AND t2.col2 = t1.col2
    AND t2.col1 != t1.col1 -- 如果表有主键,用主键替换col1更准确
);

提示:如果表有主键(比如id列),优先用主键替代col1,避免因col1值重复导致错误判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:05:04