Está en la página 1de 23

Funciones de una sola fila, que se exploran en los captulos 4 y 5, devolver un solo valor para cada fila un conjunto

de resultados. Las funciones de grupo o agregado operan en varias filas. Se utilizan para contar el nmero de filas o para encontrar la media de los valores de columnas especficas en un conjunto de datos. Muchas operaciones estadsticas, como el clculo de la desviacin estndar, medianas y medias, dependen en la ejecucin de funciones con datos agrupados y no slo a las filas individuales. Las funciones de grupo se examinan en dos etapas. En primer lugar, su propsito y su sintaxis es discutido. En segundo lugar, un anlisis detallado de la AVG, SUM, MIN, MAX y COUNT se lleva a cabo funciones. El concepto de agrupacin o segregacin de datos basado en uno o ms valores de columna se explora antes de la introduccin de la clusula GROUP BY. La clusula WHERE restringe las filas de un conjunto de datos antes de la agrupacin, mientras que el Clusula HAVING restringe ellos despus agrupacin. Este captulo concluye con una discusin de la clusula HAVING. CERTIFICACIN OBJETIVO 6,01 Describir las funciones de grupo Funciones de grupo de SQL se definen y se discuten las diferentes variantes. La sintaxis de las funciones del grupo seleccionado se explica, se discuten los tipos de datos y la Se explor el efecto de la palabra clave DISTINCT en ellos. Esta discusin se divide en dos reas principales: Definicin de las funciones de grupo Tipos y sintaxis de las funciones de grupo Definicin de Funciones de Grupo Las funciones de grupo operan en los datos agregados y devuelven un nico resultado por grupo. Estos grupos por lo general constan de cero o ms filas de datos. Funciones de una sola fila son

se define con la frmula: F (x, y, z, ...) = resultado, donde x, y, z ... son parmetros de entrada. La funcin F se ejecuta en una fila del conjunto de datos a la vez y devuelve un resultado para los cada fila. Las funciones de grupo se pueden definir mediante la siguiente frmula: F (g1, g2, g3, ..., gn) = resultado1, result2, result2, ..., resultn; La funcin de grupo se ejecuta una vez para cada grupo de filas y devuelve un solo Resultados por grupo. Estos grupos pueden ser tablas enteras o partes de las tablas asociadas con un valor comn o atributo. Si todas las filas en las tablas se presentan como uno Describir las funciones de grupo 275 grupo a la funcin de grupo se devuelve un resultado. Una o ms funciones de grupo puede aparecer en la lista SELECT de la siguiente manera: SELECT group_function (columna o expresin), ... FROM tabla [WHERE ...] [ORDER BY ...] Considere la tabla EMPLEADOS. Hay 107 filas en esta tabla. Los grupos pueden se crear basada en los valores comunes que comparten filas. Por ejemplo, las filas que compartir el mismo valor DEPARTMENT_ID pueden ser agrupados juntos. A partir de entonces, funciones de grupo se ejecutan por separado frente a cada grupo nico. Como muestra la Figura 6.1, hay 12 valores DEPARTMENT_ID distintos en el EMPLEADOS mesa incluyendo un valor nulo. Las filas se distribuyen en 12 grupos basada en los valores comunes de DEPARTMENT_ID. La funcin COUNT ejecuta 12 veces, una vez para cada grupo. Tenga en cuenta que los distintos grupos no contienen la mismo nmero de filas. Las funciones de grupo agregan un nmero de valores de mltiples filas en una solo resultado. Son ampliamente utilizados para la elaboracin de informes y tambin se conocen como resumen o funciones de agregado. Datos agregados tiles tales como sumas totales, promedios y recuentos a menudo son la base de estadsticas ms sofisticadas clculos. Es til tener una buena comprensin de los datos almacenados en

las tablas de aplicacin para maximizar la calidad de la informacin global. Tipos y sintaxis de Funciones de Grupo Una breve descripcin de las funciones de grupo ms comnmente utilizados se proporciona a continuacin. Muchos se examinan en detalle ms adelante en este captulo. La funcin COUNT cuenta el nmero de filas de un grupo. Su sintaxis es la siguiente: COUNT ({* | [DISTINCT | ALL] expr}); Esta sintaxis puede ser deconstruido en las siguientes formas: 1. COUNT (*) 2. COUNT (DISTINCT expr) 3. COUNT (ALL expr) 4. COUNT (expr) Cuando se invoca COUNT (*), todas las filas del grupo, incluyendo aquellos con valores nulos o valores duplicados se cuentan. Cuando se ejecuta COUNT (DISTINCT expr), slo ocurrencias nicas de expr se cuentan para cada grupo. La palabra clave ALL es parte de la sintaxis predeterminada, por lo COUNT (ALL expr) y COUNT (expr) son equivalentes. Estos recuento el nmero de casos no nulos de expr en cada grupo. El tipo de datos puede ser expr 276 Captulo 6: Presentacin de informes de datos agregados que utilizan las Funciones de Grupo Nmero, fecha, CHAR o VARCHAR2. Si expr es un valor nulo, se ignora a menos que sea administrado mediante una funcin general como NVL, NVL2 o COALESCE. La funcin AVG calcula el valor medio de una columna numrica o expresin en un grupo. Su sintaxis es la siguiente: AVG ([DISTINCT | ALL] expr); Esta sintaxis puede ser deconstruido en las siguientes formas: 1. AVG (DISTINCT expr) 2. AVG (ALL expr) 3. AVG (expr)

FIGURA 6-1 Funciones de grupo operar el 12 de grupos Describa el Grupo de Funciones 277 Cuando se invoca AVG (DISTINCT expr), se suman los valores distintos de expr y dividido por el nmero de ocurrencias nicas de expr. AVG (ALL expr) y AVG (expr) agregar los valores no nulos de expr para cada fila y divida la suma por el nmero de filas no nulas en el grupo. El tipo del parmetro expr datos NUMBER. La funcin SUM devuelve el total agregado del no nulo numrico los valores de expresin de un grupo. Tiene la siguiente sintaxis: SUM ([DISTINCT | ALL] expr); Esta sintaxis puede ser deconstruido en las siguientes formas: 1. SUM (DISTINCT expr) 2. SUM (ALL expr) 3. SUM (expr) SUM (DISTINCT expr) ofrece un total sumando todos los valores nicos devueltos despus de expr se evala para cada fila del grupo. SUM (expr) y SUM (ALL expr) proporcionar un total sumando expr para cada fila del grupo. Se ignoran los valores nulos. El tipo de expr datos NUMBER. Las funciones MAX y MIN devuelven el mximo (ms grande) y mnimo (Menor) valor de expr en un grupo. Su sintaxis es la siguiente: MAX ([DISTINCT | ALL] expr), MIN ([DISTINCT | ALL] expr) Esta sintaxis puede ser deconstruido en las siguientes formas: 1. MAX (DISTINCT expr), MIN (DISTINCT expr) 2. MAX (ALL expr), MIN (ALL expr) 3. MAX (expr), MIN (expr);

MAX (expr), MAX (ALL expr) y MAX (DISTINCT expr) examinan los valores de expr en un grupo de filas y devolver el valor ms grande. Se ignoran los valores nulos. MIN (expr), MIN (ALL expr) y MIN (DISTINCT expr) examinan los valores de expr en un grupo de filas y devolver el valor ms pequeo. El tipo de datos del parmetro expr puede ser nmero, fecha, CHAR o VARCHAR2. Las funciones STDDEV y varianza son dos de los muchos grupos estadstica Oracle proporciona funciones. VARIACIN tiene la siguiente sintaxis: VARIACIN ([DISTINCT | ALL] expr); Esta sintaxis puede ser deconstruido en las siguientes formas: 1. VARIACIN (DISTINCT expr) 2. VARIACIN (ALL expr) 3. VARIACIN (expr) 278 Captulo 6: Presentacin de informes de datos agregados que utilizan las Funciones de Grupo STDDEV tiene la siguiente sintaxis: STDDEV ([DISTINCT | ALL] expr); Esta sintaxis puede ser deconstruido en las siguientes formas: 1. STDDEV (DISTINCT expr) 2. STDDEV (ALL expr) 3. STDDEV (expr) Varianza estadstica se refiere a la variabilidad de las puntuaciones en una muestra o un conjunto de datos. VARIACIN (DISTINCT expr) devuelve la variabilidad de los datos no NULL nicos en un grupo. VARIACIN (expr) y la varianza (ALL expr) devuelven la variabilidad de datos no nulos en el grupo. STDDEV calcula la desviacin estndar estadstico, que es el grado de desviacin del valor medio en un grupo. Se deriva mediante la bsqueda de la raz cuadrada de la varianza. STDDEV (DISTINCT expr) devuelve la desviacin estndar de los datos no NULL nicos en

un grupo. STDDEV (expr) y STDDEV (ALL expr) devuelven la desviacin estndar de datos no nulos en el grupo. El tipo del parmetro expr datos NUMBER. Hay dos fundamentales reglas para recordar la hora de estudiar el grupo funciones. En primer lugar, siempre operan en un solo grupo de filas a la vez. El grupo de puede ser uno de muchos grupos de un conjunto de datos tiene ha sido segmentado en o puede ser un entero tabla. La funcin de grupo se ejecuta una vez por grupo. En segundo lugar, las filas con valores nulos se producen en Se ignoran las columnas o expresiones de grupo, a menos que una funcin general como NVL, NVL2, o COALESCE se proporciona para su manejo. Consideremos el siguiente ejemplo. Si el valor medio para COMMISSION_PCT se recupera de la tabla EMPLEADOS, slo se consideran los valores no nulos. La expresin AVG (COMMISSION_PCT) agrega el no nulo 35 COMMISSION_ Valora PCT y divide el total por 35. El promedio basado en los 107 filas puede calcularse usando la expresin AVG (NVL (COMMISSION_PCT, 0)). Identificar el grupo Disponible Funciones 279 CERTIFICACIN OBJETIVO 6,02 Identificar las funciones de grupo disponibles Estaban discuten las diferentes variantes de las funciones de grupo y su sintaxis. Este

seccin se ofrecen ejemplos de la aplicacin de estas funciones. La interacciones de las funciones de grupo con valores nulos y la palabra clave DISTINCT son discutida, y tambin se considera el concepto de funciones de grupo de anidacin. La funciones disponibles del grupo se identifican y exploran en los siguientes epgrafes: Uso de las funciones de grupo Funciones de anidamiento de grupos Uso de las Funciones de Grupo La aplicacin prctica de las funciones de grupo se demuestra el uso de AVG, SUM, MIN, MAX y COUNT. Estas funciones de grupo todos los devuelven resultados numricos. Adems, las funciones MIN y MAX pueden volver carcter y resultados actualizados. Estos cinco funciones operan en los valores no nulos, pero, a diferencia de los dems, la funcin COUNT (*) llamada tambin cuenta filas con valores nulos. La palabra clave DISTINCT se utiliza para limitar las filas enviadas a las funciones de grupo. Los analistas con frecuencia desean saber el valor total o el promedio agregado de un columna o una expresin. Esto es fcil de lograr con la mayora de los paquetes de hojas de clculo. Uso de las funciones de grupo SQL de informes proporciona dos ventajas sobre el uso una hoja de clculo para su anlisis. En primer lugar, ofrecen una plataforma conveniente para llevar a cabo clculos con datos en tiempo real en vivo. En segundo lugar, permiten un fcil anlisis de todos los valor en un conjunto de datos o de grupos especficos de valores. La funcin COUNT La ejecucin de la cuenta en una columna o una expresin que devuelve un valor entero que representa el nmero de filas en el grupo. La funcin COUNT tiene la siguiente sintaxis: COUNT ({* | [DISTINCT | ALL] expr}); No es un parmetro que puede ser o bien *, que representa todas las columnas

incluyendo los valores nulos, o una columna o expresin especfica. Se puede ir precedido por el Palabras clave DISTINCT o ALL. Considere las siguientes preguntas: Consulta 1: select count (*) de los empleados Consulta 2: select count (COMMISSION_PCT) de los empleados 280 Captulo 6: Presentacin de informes de datos agregados que utilizan las Funciones de Grupo Consulta 3: select count (COMMISSION_PCT distintos) de los empleados Consulta 4: select count (hire_date), recuento (manager_id) de los empleados Consulta 1 recuentos de las filas de la tabla Empleados y devuelve el entero 107. Consulta 2 cuentas las filas con valores no nulos COMMISSION_PCT y vuelve 35. Consulta 3 considera las 35 filas no nulas, determina el nmero de valores nicos, y devuelve 7. Consulta 4 muestra dos caractersticas. En primer lugar, varias funciones de grupo puede ser utilizado en la misma lista de seleccin y segundo, la funcin COUNT se utiliza en tanto una columna DATE y una columna NUMBER. Los nmeros enteros 107 y 106 se devuelven ya que hay 107 valores hire_date no nulos y 106 no nula MANAGER_ID los valores del grupo. Tres expresiones adyacentes mediante la funcin COUNT se muestran en la Figura 6-2. Esta consulta muestra que hay 107 registros de los empleados en los EMPLEADOS tabla. Adems, estos 107 empleados estn asignados a 12 departamentos, incluyendo nula departamentos, y trabajar en 19 puestos de trabajo nicos. La funcin SUM El total acumulado de una columna o una expresin se calcula con la SUMA funcin. Su sintaxis es la siguiente: SUM ([DISTINCT | ALL] expr); Un parmetro numrico, opcionalmente precedido por la DISTINCT o ALL palabras clave, se proporciona a la funcin SUMA, que devuelve un valor numrico. Considere las siguientes preguntas:

Consulta 1: SELECT SUM (2) de los empleados Consulta 2: SELECT SUM (salario) de los empleados Consulta 3: SELECT SUM (salario distinto) de los empleados Consulta 4: select sum (COMMISSION_PCT) de los empleados FIGURA 6-2 El COUNT funcin Identificar las funciones de grupo disponibles 281 Hay 107 filas en la tabla empleados. Consulta 1 se suma el nmero 2 en 107 filas y devuelve 214. Consulta 2 toma el valor de la columna SALARIO para cada fila el grupo, que en este caso es toda la tabla y devuelve el monto salarial total de 691.400. Consulta 3 devuelve un total de 397.900, ya que muchos empleados se les paga el mismo salario y la palabra clave DISTINCT slo se suma valores nicos en la columna del total. Consulta 4 devuelve 7,8 despus de aadir los valores no nulos. La Figura 6-3 muestra dos consultas. El primero calcula el nmero de das entre la fecha del sistema actual y el valor de la columna hire_date. La aritmtica fecha es realizado por cada fila. Se aade el nmero devuelto mediante una llamada a la funcin SUM. El resultado se divide por 365,25 para obtener el nmero total de aos trabajados por todos los actuales empleados. La segunda consulta muestra que la funcin SUM devuelve un "ORA-00932: tipos de datos incompatibles error "si se proporciona con un argumento numrico. La funcin AVG El valor promedio de una columna o expresin divide la suma por el nmero de filas no nulas en el grupo. La funcin AVG tiene la siguiente sintaxis: AVG ([DISTINCT | ALL] expr); Un parmetro numrico, precedido de las palabras clave DISTINCT o ALL, es proporcionado a la funcin AVG, que devuelve un valor numrico. Tenga en cuenta la siguientes preguntas:

Consulta 1: select avg (2) de los empleados Consulta 2: SELECT AVG (salario) de los empleados Consulta 3: select avg (sueldo distintos) de los empleados Consulta 4: select avg (COMMISSION_PCT) de los empleados FIGURA 6-3 El SUM funcin 282 Captulo 6: Presentacin de informes de datos agregados que utilizan las Funciones de Grupo Hay 107 filas en la tabla empleados. Consulta 1 se suma el nmero 2 en 107 filas y divide el total por el nmero de filas que se devuelven el nmero 2. Los literales numricos presentados a la funcin AVG se devuelven sin cambios. Consulta 2 agrega el valor de salario por cada fila para obtener la cantidad total de sueldos de 691.400. Este se divide por las 107 filas con valores no nulos SALARIALES para devolver el promedio 6461.68224. Usted puede esperar consulta 3 para devolver un resultado menor que consulta 2, pero no lo hace. Hay 57 valores salariales nicas, que cuando se aade, se obtiene un total de 397900. Dividir por 57 397 900 devuelve 6980.70175 como la media de la clara valores salariales. Consulta 4 puede producir resultados inesperados si no es bien entendida. Sumando los valores no nulos, incluyendo los duplicados, produce un total de 7,8. Hay 35 registros de los empleados con los valores no nulos COMMISSION_PCT. Dividiendo 7,8 por 35 produce una COMMISSION_PCT promedio de 0,222857143. La Figura 6-4 muestra dos consultas. Las primeras listas LAST_NAME y JOB_ID columnas con una expresin que calcula el nmero total de aos trabajados por los programadores de la organizacin. El segundo utiliza la funcin AVG para calcular el nmero medio de aos de los que se han empleado los programadores actuales. El MAX y MIN Las funciones MIN MAX y operan en nmero, fecha, CHAR, y

Tipos de datos VARCHAR2. Ellos devuelven un valor del mismo tipo de datos como insumo argumentos, que son o bien los artculos ms grandes o ms pequeos del grupo. Cuando se aplica a DATE artculos, MAX devuelve la fecha ms reciente y MIN devuelve el ms antiguo. FIGURA 6-4 La funcin AVG Identificar las funciones de grupo disponibles 283 Las cadenas de caracteres se convierten en representaciones numricas de su componente caracteres basan en la configuracin de NLS en la base de datos. Cuando la funcin MIN es aplicado a un grupo de cadenas de caracteres, la palabra que aparece primero es alfabtico regresado, mientras MAX devuelve la palabra que aparecera pasado. El MAX y MIN funciones tienen la siguiente sintaxis: MAX ([DISTINCT | ALL] expr), MIN ([DISTINCT | ALL] expr) Ellos toman un parmetro precedido de las palabras clave DISTINCT o ALL. Considerar las siguientes consultas: Consulta 1: select min (COMMISSION_PCT), max (COMMISSION_PCT) de empleados Consulta 2: select min (start_date), max (end_date) de job_history Consulta 3: select min (job_id), max (job_id) de los empleados Consulta 1 devuelve los valores numricos de 0,1 y 0,4 para el mnimo y el mximo COMMISSION_PCT valores de la tabla EMPLEADOS. Tenga en cuenta que los valores nulos para COMMISSION_PCT se ignoran. Consulta 2 evala una columna DATE e indica que la primera START_DATE en la tabla JOB_HISTORY es 17-SEP-1987 y la ltima es END_DATE 31-DEC-1999. Consulta 3 vuelve AC_ACCOUNT y ST_MAN como valores JOB_ID aparece primero y el ltimo en orden alfabtico en el EMPLEADOS mesa. La primera consulta que se muestra en la Figura 6-5 utiliza las funciones MAX y MIN para obtener

informacin sobre los empleados con los valores JOB_ID de SA_REP. Los resultados indican que los representantes de ventas que trabajan para las duraciones ms cortas y largas fueron FIGURA 6-5 El MIN y Funciones MAX 284 Captulo 6: Presentacin de informes de datos agregados que utilizan las Funciones de Grupo contratado en 21-APR-2000 y 30-JAN-1996, respectivamente. Adems, las ventas representantes que ganan los sueldos ms grandes y ms pequeos ganan 11.500 y 6.100, respectivamente. La segunda consulta obtiene los valores LAST_NAME para las ventas representantes a los que el hire_date y salario mnimo y mximo se aplican los valores. EJERCICIO 6-1 Uso de las Funciones de Grupo La tabla PASES almacena una lista de valores COUNTRY_NAME. Usted est obligado para el clculo de la duracin media de todos los nombres de pases. Cualquiera de los componentes fraccionarios debe ser redondeado al nmero entero ms prximo. 1. Inicie SQL * Plus y conectar con el esquema HR. 2. La longitud del valor del nombre del pas por cada fila se calcula utilizando la Funcin LONGITUD. La longitud media puede determinarse usando el AVG funcin. Puede ser redondeado al nmero entero ms cercano utilizando el ROUND funcin. 3. La clusula SELECT utilizando alias AVERAGE_COUNTRY_NAME_LENGTH es SELECT ROUND (AVG (LONGITUD (COUNTRY_NAME))) AVERAGE_COUNTRY_NAME_LENGTH 4. La clusula FROM es DE LOS PASES

5. Al ejecutar esta instruccin devuelve una sola fila que representa el promedio longitud de todos los nombres de dominio en la tabla PASES, como se muestra en la Fig. siguiente: Identificar las funciones de grupo disponibles 285 Funciones de Grupo anidadas Recordemos que las funciones de una sola fila pueden estar anidados o incrustados a cualquier nivel de profundidad. Las funciones de grupo slo pueden anidar dos niveles de profundidad. Tres formatos utilizando grupo funciones se muestran aqu: G1 (group_item) = resultado G1 (G2 (group_item) = resultado G1 (G2 (G3 (group_item))) NO est permitido. Las funciones de grupo estn representados por la letra G seguida de un nmero. La primera sencillo formulario contiene funciones anidadas. Los ejemplos incluyen el SUM (group_item) o AVG funciones (group_item) que devuelven un nico resultado por grupo. La segunda forma admite dos funciones de grupo anidadas, como SUM (AVG (group_item)). En este caso, una Clusula GROUP BY es obligatoria ya que el valor medio de la group_item por grupo se calcula antes de ser agregado por la funcin SUM. La tercera forma es rechazado por Oracle. Considere la posibilidad de una expresin que anida tres funciones de grupo. Si la funcin MAX se aplica al ejemplo anterior, se forma la expresin MAX (SUM (AVG (group_item))). El grupo interno de dos funciones devuelven un valor nico que representa la suma de un conjunto de valores medios. Este expresin se convierte en MAX (valor nico). Una funcin de grupo no se puede aplicar a un solo valor. ESCENARIOS Y SOLUCIONES Le gustara recuperar la fecha ms de un la columna que almacena la informacin de la fecha. Puede un grupo de

funcin se utiliza para recuperar este valor? S. La funcin MIN opera en numrico, fecha, y los datos de caracteres. Cuando la funcin MIN es ejecutado en una columna DATE, la fecha ms temprana valor se devuelve. Las estadsticas de resumen se requieren por la alta gestin. Esto incluye detalles como el nmero de empleados, el costo total de personal de salario, el salario ms bajo, y valores ms altos salarios. Se puede establecer como un informe utilizando una consulta? S. No hay ninguna restriccin para el nmero de grupo de funciones enumeradas en la clusula SELECT. La solicitada informe se pueden extraer utilizando la siguiente consulta: SELECT Num_Employees COUNT (*), SUM (SALARIO) Tot_Salary_Cost, MIN (SALARIO) Salario ms bajo, MAX (SALARIO) Salario mximo De los empleados; Se le pedir que indique el nmero de puestos de trabajo singulares realizado por los empleados de la organizacin. Contando los registros JOB_ID le dar toda la puestos de trabajo. Es posible contar los puestos de trabajo singulares? S. La palabra clave DISTINCT se puede utilizar con la funciones de agregado. Para contar valores nicos JOB_ID en la tabla EMPLEADOS, puede ejecutar la consulta: SELECT COUNT (DISTINCT JOB_ID) De los empleados;

286 Captulo 6: Presentacin de informes de datos agregados que utilizan las Funciones de Grupo La Figura 6-6 muestra dos consultas. Tanto restringir las filas devueltas a los que tienen Valores DEPARTMENT_ID de nulo, 40, y 80. Estos son entonces divididas por su Valores DEPARTMENT_ID en tres grupos. La primera consulta calcula la suma de los los valores COMMISSION_PCT para cada grupo y devuelve el valor 0.15, null, y 7,65. Consulta 2 contiene las funciones de grupo anidadas, que pueden ser evaluados como siguiente manera: AVG (SUM (COMMISSION_PCT)) = (0.15 + 7.65) / 2 = 3.9. FIGURA 6-6 Grupo anidado funciones Datos de grupo mediante la clusula GROUP BY 287 CERTIFICACIN OBJETIVO 6,03 Datos de grupo mediante la clusula GROUP BY Las funciones del grupo discutieron grupos de uso antes de filas que comprenden toda la tabla. Esta seccin explora particin de un conjunto de datos en grupos utilizando el GROUP BY clusula. Las funciones de grupo se pueden aplicar a estos subconjuntos o grupos de filas. La sintaxis de las funciones del grupo y la clusula GROUP BY se discuten en las siguientes reas: Creacin de grupos de datos La clusula GROUP BY Agrupar por varias columnas Creacin de grupos de datos Una tabla tiene al menos una columna y cero o ms filas de datos. En muchas mesas estos datos requiere un anlisis para transformarla en informacin til. Es un comn requisito de notificacin para calcular las estadsticas de un conjunto de datos divididos en grupos el uso de diferentes atributos. Ejemplos anteriores utilizando las funciones de grupo operan en contra

todas las filas de una tabla. La tabla completa se trata como un grupo grande. Grupos de datos dentro de un conjunto son creadas por la asociacin de filas con propiedades comunes o atributos entre s. A partir de entonces, las funciones de grupo pueden ejecutar en cada uno de los estos grupos. Grupos de datos incluyen filas enteras y no columnas especficas. Funciones de una sola fila pueden anidarse hasta cualquier nivel, pero el grupo funciones se pueden anidar, a lo sumo, dos niveles de profundidad. La funcin anidada llame COUNT (SUM (AVG (X))) devuelve el error "ORA-00935: La funcin de grupo est anidada muy profundamente. "Es aceptable anidar funciones de una sola fila dentro del grupo funciones. Considere la siguiente consulta: SELECT SUM (AVG (LONGITUD (LAST_ NOMBRE))) de los empleados GROUP BY Department_id. Se calcula la suma de los la duracin media de los valores LAST_NAME por departamento. 288 Captulo 6: Presentacin de informes de datos agregados que utilizan las Funciones de Grupo Considere la tabla EMPLEADOS. Se compone de 11 columnas y 107 filas. Usted podra crear grupos de filas que comparten un valor comn DEPARTMENT_ID. La Funcin SUMA puede entonces ser utilizada para crear los totales de salarios por departamento. Otro posible conjunto de grupos puede compartir los valores de la columna job_id comunes. El grupo de AVG funcin puede entonces ser utilizada para identificar el salario promedio pagado a los empleados en

distintos puestos de trabajo. Un grupo se define como un subconjunto de la totalidad del conjunto de datos compartiendo uno o ms comn atributos. Estos atributos son tpicamente valores de la columna, pero tambin pueden ser expresiones. El nmero de grupos creados depende de los distintos valores presentes en el comn atributo. Como muestra la Figura 7.6, hay 12 valores DEPARTMENT_ID nicas en el EMPLEADOS mesa. Si las filas se agrupan utilizando los valores de DEPARTMENT_ID comunes, habr 12 grupos. Si una funcin de grupo se ejecuta en contra de estos grupos, ser 12 valores devueltos, ya que se ejecutar una vez para cada grupo. Agrupar datos y el uso de funciones de resumen son ampliamente utilizados para la presentacin de informes propsitos. Es valioso para practicar la segmentacin de un conjunto de datos en diferentes agrupaciones. Oracle proporciona la lengua analtica de deconstruir conjuntos de datos en grupos, estos se dividen en subgrupos adicionales, y as sucesivamente. Agregado funciones de agrupacin y luego se pueden ejecutar en contra de estos grupos y subgrupos. La clusula GROUP BY La instruccin SELECT se ve reforzada por la adicin de la clusula GROUP BY. Esta clusula facilita la creacin de grupos. Al parecer, despus de la clusula WHERE, pero antes de la clusula ORDER BY, de la siguiente manera: Seleccione la columna | expresin | group_function (columna | expresin [alias]), ...} FROM tabla [Condicin WHERE (s)] [GROUP BY {col (s) | expr}] [ORDER BY {col (s) | expr | numeric_pos} [ASC | DESC] [NULLS FIRST | LAST]]; La columna o expresin especificada en la clusula GROUP BY es tambin conocido como el atributo de agrupacin y es el componente que se agrupan por filas. El conjunto de datos es

segmentado basa en el atributo de agrupacin. Considere la siguiente consulta: select max (salario), cuenta (*) de los empleados grupo por department_id ordenar por department_id Datos de grupo mediante la clusula GROUP BY 289 El atributo de agrupacin en este ejemplo es la columna DEPARTMENT_ID. La conjunto de datos, en el que las funciones de grupo en la lista SELECT deben operar, se divide en 12 grupos, uno por cada departamento. Para cada grupo (departamento), el mximo valor de salario y el nmero de filas que se devuelven. Dado que los resultados se ordenan por DEPARTMENT_ID, la tercera fila del conjunto de resultados contiene los valores de 11.000 y 6. Esto indica que 6 empleados tienen un valor DEPARTMENT_ID de 30. De estos 6, la mayor fuente de ingresos tiene un valor de 11,000 SUELDO. Esta consulta demuestra que el agrupar atributo no tiene que ser incluido en la lista SELECT. FIGURA 6-7 nico DEPARTMENT_ Valores de ID de la Tabla EMPLEADOS 290 Captulo 6: Presentacin de informes de datos agregados que utilizan las Funciones de Grupo Es comn ver el atributo de agrupacin en la lista SELECT junto con la agrupacin funciones. Si un elemento, que no es una funcin de grupo, aparece en la lista SELECT y no hay clusula GROUP BY, una "ORA-00937: no hay un solo grupo de funcin de grupo" se eleva de error. Si una clusula GROUP BY est presente, pero que el tema no es una agrupacin atributo, entonces un "ORA-00979: no es una expresin GROUP BY" error se devuelve. Cualquier elemento de la lista SELECT que no es una funcin de grupo debe ser un atributo de agrupacin

de la clusula GROUP BY. Si se coloca una funcin de grupo en una clusula WHERE, una "ORA-00934: el grupo funcin no est permitido aqu ", se devuelve el error. La imposicin de condiciones a nivel de grupo es logrado mediante la clusula HAVING se discute en la siguiente seccin. Funciones de grupo Sin embargo, puede ser utilizado como parte de la clusula ORDER BY. La primera consulta de la Figura 6-8 genera un error ya que la columna es END_DATE en la lista SELECT con una funcin de grupo y no hay clusula GROUP BY. Un Se devuelve "ORA-00979" error de la segunda consulta desde el START_DATE artculo se enumera en la clusula SELECT, pero no es un atributo de agrupacin. La tercera consulta se divide las filas JOB_HISTORY en grupos basados en la 4 dgitos componente aos de la columna END_DATE. Cuatro grupos se crean utilizando este agrupacin de atributos. Representan diferentes aos cuando terminaron los empleados su puestos de trabajo. El COUNT muestra el nmero de empleados que renunciaron a sus puestos de trabajo durante cada FIGURA 6-8 El GROUP BY clusula Datos de grupo mediante la clusula GROUP BY 291 de estos aos. Los resultados se muestran en orden descendente en base al "Nmero de Empleados "expresin. Tenga en cuenta que la funcin de grupo COUNT est presente en el Clusula ORDER BY. Agrupacin de varias columnas Un potente extensin de la clusula GROUP BY utiliza mltiples atributos de agrupacin. Oracle permite a los conjuntos de datos se divide en grupos y permite que estos grupos sean dividida en subgrupos utilizando un atributo de agrupacin diferente. Tenga en cuenta la despus de dos consultas: Consulta 1: seleccione department_id, sum (COMMISSION_PCT) de los empleados

donde COMMISSION_PCT no es nula por grupo department_id Consulta 2: select department_id, job_id, sum (COMMISSION_PCT) de empleados donde COMMISSION_PCT no es nula por grupo department_id, job_id Consulta 1 restringe las filas devueltas de la tabla Empleados de las 35 filas con valores no nulos COMMISSION_PCT. Estas filas se dividen en dos grupos: 80 y NULL basado en el atributo de agrupacin DEPARTMENT_ID. La conjunto de resultados contiene dos filas, que devuelven la suma de la COMMISSION_PCT valores para cada grupo. Consulta 2 es similar a la primera excepto que tiene un elemento adicional: JOB_ID en tanto el SELECT y clusulas GROUP BY. El segundo atributo de agrupacin se descompone los dos grupos sobre la base de DEPARTMENT_ID en el JOB_ID constituyente componentes que pertenecen a las filas en cada grupo. Los valores JOB_ID distintas para filas con DEPARTMENT_ID = 80 son SA_REP y SA_MAN. El JOB_ID distinta valor para las filas con null DEPARTMENT_ID es SA_REP. Por lo tanto, consultar 2 retornos dos grupos, uno que consiste en dos subgrupos, y el otro con una sola, como se muestra en la Figura 6-9. Un conjunto de datos se divide en los grupos que utilizan la clusula GROUP BY. El atributo de agrupacin es el comn clave compartida por los miembros de cada grupo. El atributo de agrupacin es por lo general una sola columna, pero puede ser varias columnas o una expresin que no se puede basar en funciones de grupo. Tenga en cuenta que slo agrupacin atributos y funciones de grupo son permitido en la clusula SELECT al utilizar

GROUP BY. 292 Captulo 6: Presentacin de informes de datos agregados que utilizan las Funciones de Grupo EJERCICIO 6-2 Agrupar datos Basado en varias columnas El anlisis de la rotacin de personal es un requisito comn para los informes. Usted est obligado a crear un informe con el nmero de empleados que dejaron sus puestos de trabajo, agrupados por el ao en que se fueron. Tambin se necesitan los puestos de trabajo que realizan. Los resultados debe ser ordenada por orden en funcin del nmero de empleados en cada grupo descendente. El informe debe incluir el ao, el JOB_ID, y el nmero de empleados que dej un trabajo en particular en ese ao. 1. Inicie SQL Developer y conectar con el esquema HR. 2. La tabla contiene las columnas JOB_HISTORY END_DATE y JOB_ID, que constituyen la fuente de datos para este informe. 3. El componente de ao se extrae mediante la funcin TO_CHAR. El nmero de los empleados que dejan un trabajo determinado en cada ao se obtiene mediante el COUNT (*) funcin. 4. La clusula SELECT es TO_CHAR (END_DATE, 'YYYY') "Ao de Dejar de fumar", JOB_ID, COUNT (*) "Nmero de empleados" 5. La clusula FROM es DE EMPLEADOS FIGURA 6-9 El GRUPO BY con

mltiples columnas Datos de grupo mediante la clusula GROUP BY 293 6. No existe ninguna clusula WHERE. 7. Dado que el informe exige a los empleados para ser listados por ao y JOB_ID, estos dos elementos deben aparecer en la clusula GROUP BY, que es GROUP BY TO_CHAR (END_DATE, 'YYYY'), JOB_ID 8. La clasificacin se realiza con ORDER BY COUNT (*) DESC 9. Al ejecutar esta instruccin devuelve el informe de movimiento de personal solicitado, como se muestra en la siguiente ilustracin: 294 Captulo 6: Presentacin de informes de datos agregados que utilizan las Funciones de Grupo CERTIFICACIN OBJETIVO 6,04 Incluir o excluir filas agrupadas Uso de la clusula HAVING Creacin de grupos de datos y la aplicacin de las funciones de agregado es muy til. Un refinamiento de estas caractersticas es la posibilidad de incluir o excluir los resultados basados en el nivel de grupo condiciones. Esta seccin presenta la clusula HAVING. Se hace una distincin clara entre la clusula WHERE y la clusula HAVING. La clusula HAVING es se explica en las siguientes reas: Restringir los resultados del grupo La clusula HAVING Restringir los resultados del Grupo Condiciones WHERE clusula restringe las filas devueltas por una consulta. Las filas se incluyen basadas de si se cumplen las condiciones mencionadas y, a veces se conoce como nivel de fila

resultados. Filas de clster que utilizan la clusula GROUP BY y aplicando un conjunto ESCENARIOS Y SOLUCIONES Supongamos que desea imprimir tarjetas de identificacin para el personal que trabajar como representantes de ventas. Puede la longitud de los valores mnimo y mximo LAST_NAME ser determinado para estos empleados? S. Las funciones MIN MAX y se aplican a la Campo LAST_NAME determinar el ms corto y nombres largos, como se muestra en la siguiente consulta: SELECT MIN (LONGITUD (APELLIDOS)), MAX (LONGITUD (APELLIDOS)) DE EMPLEADOS DONDE JOB_ID = 'SA_REP'; Es posible contar los registros en cada grupo, primero dividiendo los registros de empleados por ao de empleo, luego por trabajo, y, finalmente, por el salario? S. Agrupar por varias columnas es un poderoso opcin que permite el anlisis de grano fino como se muestra en la siguiente consulta: SELECT COUNT (*), TO_CHAR (hire_date, 'YYYY'), JOB_ID, SUELDO DE LOS EMPLEADOS GROUP BY TO_CHAR (hire_date, 'YYYY'), JOB_ID, SALARIO Hay un lmite en el nmero de grupos dentro de los grupos que se pueden formar? No. No hay lmite en el nmero de grupos y

También podría gustarte