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

关于带DISTINCT的SQL查询中COUNT(1)=1与GROUP BY中sys的作用咨询

这段SQL语句的逻辑解析

先把你给出的SQL语句整理修正(SQL字符串常量通常用单引号):

SELECT DISTINCT col1 
FROM tab1
WHERE creat_dt_tm >= sysdate - 1/24/60*30 
  AND condition2 = 'xyz' 
GROUP BY col1, sys 
HAVING COUNT(1) = 1

下面逐个拆解你疑问的点:

1. GROUP BY子句中的sys有什么作用?

sys是表tab1里的一个字段(大概率是系统来源、系统编码这类业务字段),GROUP BY col1,sys表示把col1值和sys值都相同的行归为同一个分组。哪怕col1值完全一样,只要对应的sys值不同,就会被拆成两个独立的分组。

2. HAVING COUNT(1)=1的作用是什么?

HAVING是对分组后的结果做筛选,COUNT(1)=1表示只保留分组内仅包含1条原始记录的分组。换而言之,在符合WHERE条件的数据集里,某个(col1,sys)的组合只出现过一次,没有重复行。

3. 已经用了DISTINCT,为什么还要这么写?

这里的DISTINCT是对GROUP BY的结果再做一次去重。因为GROUP BY是按col1+sys的组合分组,可能出现同一个col1对应不同sys的情况——比如col1='X'对应sys='SYS_A'是一个符合count=1的分组,col1='X'对应sys='SYS_B'也是一个符合count=1的分组,这时候GROUP BY后会输出两行col1='X',加上DISTINCT就能把重复的col1值合并,最终得到的是所有满足“对应每个(col1,sys)组合仅出现一次”的不重复col1值。

另外补充:其实这段SQL里的DISTINCT可以去掉,把SELECT改成SELECT col1后,再对结果做去重的逻辑和现在一致,但保留DISTINCT是更直观的写法,确保最终输出的col1没有重复值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:42:25