Ir al contenido principal

La Clausula GROUP BY

La sentencia SELECT es mejorada mediante la clausula GROUP BY. Esta clausula facilita la creación de grupos. Aparece después de la clausula WHERE pero antes de la clausula ORDER BY:

SELECT column | expression | group_function( column | expression [ alias ] ),… }
FROM table
[ WHERE conditions(s) ]
[ GROUP BY { col(s) 1 expr } } ]
[ ORDER BY { col(s) | expr | numeric_pos } [ ASC | DESC ] [NULLS FIRST | LAST ] ] ]

La columna o expresión especificada en la clausula GROUP BY es también conocida como atributo Agrupador y es el componente mediante el cual las filas serán agrupadas. El conjunto de datos es segmentado en base al atributo agrupador.

·         EL ATRIBUTO AGRUPADOR NO ES OBLIGATORIO ESTAR INCLUIDO EN LA LISTA SELECT.

·         ES COMUN VER LOS ATRIBUTOS AGRUPADORES EN LA LISTA SELECT JUNTO A LAS FUNCIONES GRUPO. SI UN ELEMENTO QUE NO ES UNA FUNCION GRUPO, APARECE EN LA LISTA SELECT Y  NO ESTA EN LA CLAUSULA GROUP BY, UN ERROR ES LEVANTADO “ORA-00937: NOT A SINGLE-GROUP GROUP FUNCTION”.

·         SI UNA CLAUSULA GROUP BY ESTA PRESENTE PERO ESE ELEMENTO NO ES UN ATRIBUTO AGRUPADOR, UN ERROR ES LEVANTADO. “ORA-00979: NOT A GROUP BY EXPRESSION”.

·         CUALQUIER ELEMENTO EN LA LISTA SELECT QUE NO SEA UNA FUNCION GRUPO DEBE ESTAR EN LA CLAUSULA GROUP BY.

·         SI UNA FUNCION GROUP ES UBICADA EN LA CLAUSULA WHERE UN ERROR ES LEVANTADO “ORA-00934: GROUP FUNCTION I NOT ALLOWED HERE”.

·         CONDICIONES A NIVEL GRUPO SON REALIZADAS EN LA CLAUSULA HAVING.

·         FUNCIONES GRUPO PUEDEN SER UTILIZADAS EN LA CLAUSULA ORDER BY.

Ejemplos:

La siguiente consulta muestra un error desde que la columna región_id que está en la lista SELECT con una función grupo y no está en una clausula GROUP BY.  Con la segunda consulta sucede lo msmo.

Consulta 1.
SELECT region_id, COUNT(*)
FROM   HR.regions;

Error que empieza en la línea 1 del comando:
SELECT region_id, COUNT(*)
FROM   HR.regions
Error en la línea de comandos:1 Columna:7
Informe de error:
Error SQL: ORA-00937: la función de grupo no es de grupo único
00937. 00000 -  "not a single-group group function"
*Cause:   
*Action:

Consulta 2.
SELECT start_date, end_date, COUNT(*)
FROM   job_history
GROUP BY start_date;

Error que empieza en la línea 1 del comando:
SELECT start_date, end_date, COUNT(*)
FROM   job_history
GROUP BY start_date
Error en la línea de comandos:1 Columna:19
Informe de error:
Error SQL: ORA-00979: no es una expresión GROUP BY
00979. 00000 -  "not a GROUP BY expression"
*Cause:   

*Action:

Comentarios