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
Publicar un comentario