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
- Columnas no agrupadas: Las columnas que no son funciones de agregación deben estar en la cláusula GROUP BY.
- 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
- ¿Puedo usar funciones de grupo sin GROUP BY?
Sí, si no incluyes columnas individuales. - ¿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.