Saltar al contenido

Cómo Utilizar la Cláusula GROUP BY en PL-SQL Packages en Oracle

PL-SQL Packages en OracleAprender a usar la cláusula GROUP BY de la sentencia SELECT en tus PL-SQL Packages en Oracle te permitirá construir querys agrupadas por uno o varios campos claves, realizando a la vez sumas de valores, contar la cantidad de registros, buscar el valor mayor y menor, sacar promedios, etc.

Generalmente la creación de grupos de datos en tus PL-SQL Packages en Oracle se hace cuando se debe construir un reporte, ya que siempre se pide mostrar un informe con la información resumida y otro con la información detallada. En los informes resumidos de tus PL-SQL Packages en Oracle se muestran totales por día, por mes, por año, por cliente, por proveedor, por departamento, etc. En tus PL-SQL Packages en Oracle se pueden construir agrupaciones por una serie de criterios, todo depende del tipo de área o rubro de la compañía para la cual se construya el sistema.

Para usar correctamente la cláusula GROUP BY en tus PL-SQL Packages en Oracle se debe conocer con anterioridad el modelo de los datos que se quiere agrupar, ya que primero debes determinar cuáles son los campos clave que se repiten en las tablas por los cuales se debe agrupar. Veamos un ejemplo práctico que permita entender mejor como usar la cláusula GROUP BY en tus PL-SQL Packages en Oracle.

Ejemplo #1: Supone que debes hacer un reporte que entregue el total de tareas realizadas por cada empleado, de cada departamento, dentro del mes y por los 3 primeros meses del año. Veamos cómo se hace esta query:

/* PL-SQL Packages en Oracle */

Select

Dep.nombre_dep departamento,

Emp.nombre_emp empleado,

To_char(tar.fecha_tarea,’mm-yyyy’) Mes-Año,

Count(tar.id_tareas_empleado) tareas

From t_departamento dep,  t_empleado emp, t_tareas_empleado tar

Where tar.fecha_tarea between to_date(’01-01-2010’,’dd-mm-yyyy’) and to_date(’31-03-2010’,’dd-mm-yyyy’)

and emp.id_empleado = tar.id_empleado

and dep.id_departamento = emp.id_departamento

Group by

Dep.nombre_dep,

Emp.nombre_emp,

To_char(tar.fecha_tarea,’mm-yyyy’)

Order by

Dep.nombre_dep,

Emp.nombre_emp,

To_char(tar.fecha_tarea,’mm-yyyy’);

TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”

¡ Haz Click Aquí y Descárgalo GRATIS Ahora !

Esta query está haciendo un GROUP BY por 3 campos, el nombre del departamento, nombre del empleado y mes-año de las tareas realizadas, fíjate que los campos del Select deben ser los mismos del Group By, solo se pueden agregar campos con funciones de grupo, en este caso solo se usa el Count, pero también se puede usar el Sum, Max, Min, etc. Además también se incluye el Order By por los mismos campos del Group by para que el resultado salga ordenado en tus PL-SQL Packages en Oracle.

Esta query entrega el siguiente resultado:

/* PL-SQL Packages en Oracle */

Departamento            Empleado                    Mes-Año         Tareas

CONTABILIDAD        LUIS MARDONES    01-2010          365

CONTABILIDAD        LUIS MARDONES    02-2010          212

CONTABILIDAD        LUIS MARDONES    02-2010          645

CONTABILIDAD        MARIO SOLAR         01-2010          735

CONTABILIDAD        MARIO SOLAR         02-2010          235

CONTABILIDAD        MARIO SOLAR         03-2010          723

FINANZAS                 MARCELO PEREZ     01-2010          435

FINANZAS                 MARCELO PEREZ     02-2010          324

FINANZAS                 MARCELO PEREZ     03-2010          575

FINANZAS                 JUAN GALVEZ          01-2010          680

FINANZAS                 JUAN GALVEZ          02-2010          380

FINANZAS                 JUAN GALVEZ          03-2010          430

En este ejemplo de tus PL-SQL Packages en Oracle solo se está mostrando parte del resultado, ya que solo se muestran 2 departamentos con dos empleados cada uno.

Te propongo que pruebes de inmediato este ejemplo en tu Base de Datos con tus propias tablas, PL-SQL Procedures en Oracle y PL-SQL Function en Oracle, para que comiences a ejercitar la mano y aprendas a dominar esta nueva técnica en tus PL-SQL Packages en Oracle.

Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de PL-SQL Packages en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con PL-SQL Packages en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.

Saludos

Roberto Vicencio – Escritor del Reporte:

Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos

7 comentarios en «Cómo Utilizar la Cláusula GROUP BY en PL-SQL Packages en Oracle»

  1. hola roberto, muy bueno tu post, me ayudo a entender mejor la funcionalidad de group by y order by.

    Pero fijate que tengo un problema que no he podido resolver yo saco alguna columnas de una tabla usando un select, pero una de esas columnas es un select de otra tabla. entonces al poner la consulta en el group by me da error ya que no se puede poner subquery en el group by.entonces como hago para ordenar cuando una de las columnas a mostar es u select aparte de otra tabla.

    Ojala me puedas dar un consejo.

    gracias y buen dia.

    1. Hola Veronica, gracias por comunicarte, como buena práctica no es recomendable usar subquerys como columnas ya que peuden disminuir la velocidad de respuesta de la consulta, se debería ocupar solo como último recurso, pero para solucionar tu problema te recomiendo que hagas el group by en un select que este un nivel mas arriba, por ejemplo:

      select *
      from ( select col1, col2, (select dato from tabla2) col3
      from tabla1) dat
      group by col3;

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  2. Hola Roberto. Muy bueno tu post. Tengo una pregunta, estoy haciendo un reporte tipo ranking de notarias, pero hay varios registros para una misma notaria y al hacer el reporte salen varios registros como este:
    154 GONZALEZ URIA OSCAR EDUARDO 27
    126 GONZALEZ URIA OSCAR EDUARDO 44
    46 GONZALEZ URIA, OSCAR EDUARDO 275
    155 GONZALEZ-VIGIL BALBUENA PERCY 27
    82 GONZALEZ-VIGIL BALBUENA PERCY 105
    23 GONZALEZ-VIGIL BALBUENA, PERCY 672
    Los numero de la izquierda es la posición que ocupa en el ranking y la de la izquierda es el conteo que se hace. Como se podría hacer una comparación y después agrupar por nombres parecidos?. Gracias por tu tiempo. Saludos.

    1. Hola Guido, gracias por comunicarte, no se entiende muy bien el resultado que quieres obtener, que es lo que quieres comparar, para hacer un ranking primero debes definir que criterio se usará para el ranking, por ejemplo cantidad de clientes, valor de los servicios, etc., una vez definido esto debes agrupar para dejar un solo registro por notaria.

      PD: Si te ha gustado lo que has visto del blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar este contenido, gracias.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.