ORA-00937: la función de grupo no es de grupo único

El error ORA-00937, también conocido como «la función de grupo no es de grupo único», es un problema común en Oracle Database que ocurre cuando se intenta combinar funciones de agregación y columnas individuales en una consulta SQL sin incluir una cláusula GROUP BY. Este error puede parecer confuso al principio, pero tiene una solución sencilla.

¿Qué significa ORA-00937?

El mensaje completo del error es: ORA-00937: la función de grupo no es de grupo único.

Esto ocurre cuando una consulta utiliza funciones como SUM, COUNT, AVG, MAX o MIN junto con columnas individuales que no están agrupadas correctamente. Por ejemplo:

SELECT department, MAX(salary)
FROM employees;

En este caso, Oracle no sabe cómo calcular el MAX(salary) mientras muestra los valores de department, ya que falta la cláusula GROUP BY.

Causas del error ORA-00937

  1. Columnas no agrupadas: Las columnas que no son funciones de agregación deben estar en la cláusula GROUP BY.
  2. Uso incorrecto de subconsultas: Combinaciones de funciones de grupo con subconsultas sin agrupar también generan este error.

Cómo solucionar ORA-00937

  • Agregar un GROUP BY: Si necesitas agrupar por columna, asegúrate de incluir todas las columnas individuales en la cláusula GROUP BY. Por ejemplo:
SELECT department, MAX(salary) AS max_salary
FROM employees
GROUP BY department;
  • Eliminar columnas no agregadas: Si no necesitas las columnas adicionales, simplemente elimina cualquier columna que no sea parte de la función de agregación. Por ejemplo:
SELECT MAX(salary) AS max_salary
FROM employees;
  • Uso correcto de subconsultas: Si utilizas subconsultas, asegúrate de manejar correctamente las funciones de grupo:
SELECT SUM(salary), (SELECT MAX(salary) FROM employees)
FROM employees
GROUP BY department_id;

Preguntas frecuentes

  1. ¿Puedo usar funciones de grupo sin GROUP BY?
    Sí, si no incluyes columnas individuales.
  2. ¿El error ORA-00937 afecta el rendimiento?
    No directamente, pero las consultas mal estructuradas pueden ser menos eficientes.

Conclusión

El error ORA-00937 se resuelve fácilmente al seguir buenas prácticas de diseño SQL, como incluir una cláusula GROUP BY o ajustar las columnas seleccionadas. Recuerda siempre revisar tus consultas para asegurarte de que cumplen con las reglas de agrupación.

Y recuerda que tienes toda una sección dedicada a errores de Oracle en la web. Nos vemos en la próxima.

Deja un comentario