求问这个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进行过滤。
正如上面那位大佬说的,一股违和感,先过滤掉一些不需要的数据,再查找啥的,效率会很高