请问这个SQL查出来的结果是什么

问题遇到的现象和发生背景

求问这个SQL查出来的结果是什么

问题相关代码,请勿粘贴截图

 SELECT COUNT(user_no) FROM t_dwd_fusion_order 
 GROUP BY user_no,date,com_key
 HAVING COUNT(user_no) > 1 
 AND  date=202203
 AND  com_key IN('ABC','DEF');

这个sql一看上去就一股违和感,它的常规写法应该是这样的

 SELECT COUNT(user_no) FROM t_dwd_fusion_order 
    where date=202203
      AND  com_key IN('ABC','DEF')
 GROUP BY user_no,date,com_key
 HAVING COUNT(user_no) > 1 ;

这个sql和你的sql查出来的结果应该是一样的,但是这个sql可能会比你的sql查询效率要高一点,因为我这个是先过滤数据再聚合,而你的是先聚合再过滤数据
假设user_no不会为空的话,那么它表示按user_no、date、com_key分组,条目数大于1;
假设user_no可能为空的话,那么它表示按user_no、date、com_key分组,user_no不为空的条目数大于1

先根据user_no,date,com_key三个列进行分组,相同的合并
然后根据条件,分组数量大于1,date=202203,com_key IN('ABC','DEF')三个条件进行筛选

having对你上面查询的结果进行条件过滤。
无非就是分组求次数和。查出来之后having进行过滤。
正如上面那位大佬说的,一股违和感,先过滤掉一些不需要的数据,再查找啥的,效率会很高