正确答案是 A、C 和 D。
分析:
A: HAVING子句通常与GROUP BY子句同时使用,但也可以在没有GROUP BY的情况下使用,例如在聚合函数的结果上进行过滤。因此,A是正确的。
B: HAVING子句和WHERE子句可以同时使用。WHERE子句用于在分组之前过滤记录,而HAVING子句用于在分组之后过滤分组结果。因此,B是不正确的。
C: 正如前面所述,WHERE子句可以与HAVING子句一起使用。WHERE子句在GROUP BY之前应用,而HAVING子句在GROUP BY之后应用。因此,C是正确的。
D: HAVING子句的主要作用是对分组后的结果进行过滤,这使得它非常适合用于聚合查询中的条件过滤。因此,D是正确的。