GROUP BY agrupa registros con valores idénticos en campos específicos en un solo registro y genera valores de resumen mediante funciones agregadas como Sum y Count. HAVING filtra los registros agrupados y solo muestra aquellos que cumplen con ciertas condiciones, de manera similar a WHERE pero aplicado a los registros agrupados.