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

T-SQL查询分组后对应列全为负值的去重列值实现方法

问题场景

现有含col1、col2两个字段的数据库表,示例数据如下:

  • col1取值序列:1、1、2、3、3
  • 对应col2取值序列:2、1、-2、1、-1
    需要编写T-SQL语句,查询返回同col1分组下所有col2取值均为负数的去重col1值,以上述示例数据为例,预期返回结果仅为col1=2。
实现方法

核心判断逻辑:只要某个col1分组里存在任意一条col2≥0的记录,这个分组就不符合要求;反过来,组里所有col2都小于0的分组就是目标结果。给两种常用写法,按需选择即可:

写法1:聚合分组判断(写法最简洁)

按col1分组后,直接判断组内col2的最大值是否小于0——如果全是负数,组内最大值必然也是负数,只要有一个非负数值,最大值就会≥0,逻辑非常直观:

-- 把YourTable替换成你的实际表名即可
SELECT col1
FROM YourTable
GROUP BY col1
HAVING MAX(col2) < 0;

拿示例数据验证逻辑:

  • col1=1分组的col2值为2、1,最大值2≥0,排除
  • col1=2分组的col2值为-2,最大值-2<0,符合要求
  • col1=3分组的col2值为1、-1,最大值1≥0,排除
    最终返回结果就是2,完全匹配预期。

写法2:NOT EXISTS判断(大表性能更优)

如果表数据量较大,且col1字段建有索引,用NOT EXISTS的写法往往性能更好,逻辑是筛选出「不存在同col1下col2≥0记录」的col1值:

SELECT DISTINCT t1.col1
FROM YourTable t1
WHERE NOT EXISTS (
    SELECT 1
    FROM YourTable t2
    WHERE t2.col1 = t1.col1
      AND t2.col2 >= 0
);

两种写法返回结果完全一致,根据实际表的数据量、索引情况选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:51:28