Si sabes como utilizar la PL-SQL Function en Oracle MAX en tus PL-SQL Packages en Oracle podrás realizar búsquedas de datos mayores o máximos rápidamente en las tablas de tu Base de Datos Oracle.
La PL-SQL Function en Oracle MAX es una función que se utiliza en grupos de datos o de forma independiente y como su nombre lo indica busca el valor máximo dentro de un grupo de datos o dentro de una tabla.
Generalmente la PL-SQL Function en Oracle MAX se utiliza en conjunto con la cláusula GROUP BY para obtener el valor mayor de cada grupo de datos. Revisemos algunos ejemplos prácticos para que entiendas mas claramente como se debe utilizar la PL-SQL Function en Oracle MAX en tus PL-SQL Packages en Oracle.
Ejemplo #1: Supone que deseas obtener el sueldo más alto o con el sueldo máximo de todos los empleados de una empresa, veamos como se hace:
/* PL-SQL Function en Oracle */
Select max(emp.sueldo) sueldo_mayor
From t_empleado emp;
En este ejemplo se obtiene el sueldo mayor, el cual se busca dentro de todos los empleados de la empresa.
Ejemplo #2: Supone ahora que debes obtener el sueldo más alto pero de cada departamento de la empresa, veamos como se hace:
/* PL-SQL Function en Oracle */
Select emp.id_departamento, max(emp.sueldo) sueldo_mayor
From t_empleado emp
Group by emp.id_departamento;
En este ejemplo se busca el sueldo mayor por cada departamento de la empresa, para esto se utiliza la PL-SQL Function en Oracle MAX en conjunto con la cláusula GROUP BY para generar un grupo por cada departamento, mostrando un resultado como el siguiente:
/* PL-SQL Function en Oracle */
Id_departamento sueldo_mayor
101 5892000
102 1562000
103 968000
104 2957000
TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”
Ejemplo #3: A la misma consulta del ejemplo 2 se pueden agregar otras funciones de grupo, como por ejemplo la PL-SQL Function en Oracle COUNT, para contar la cantidad de empleados que tiene cada departamento, veamos como quedaría:
/* PL-SQL Function en Oracle */
Select emp.id_departamento, max(emp.sueldo) sueldo_mayor, count(1) cant_empleados
From t_empleado emp
Group by emp.id_departamento;
En esta query se agregó la función COUNT para contar la cantidad de empleados que existen en cada departamento, mostrando un resultado como el siguiente:
/* PL-SQL Function en Oracle */
Id_departamento sueldo_mayor cant_empleados
105 5892000 36
106 1562000 18
107 968000 25
108 2957000 12
Te propongo que pruebes de inmediato estos ejemplos 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 Function en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con PL-SQL Function 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”
Estimado,
Debo hacer el siguiente ejercicio pero, no sé como hacerlo:
función que entregue el material que mas ha entregado un proveedor
y está función la debo llamar desde una aplicación puede ser con cualquier lenguaje de programación, si me puede ayudar en esto se lo agradecería un montón.
Saludos cordiales.
Hola Jhosep, este tipo de consultas son un poco difíciles de realizar, pero existen varias formas de hacerlo, aqui te adjunto una consulta que puedes ajustar a lo que necesitas para tu función, solo debes reemplazar la tabla ficticia que cree por tus tablas reales filtrando por tu id_proveedor, en este ejemplo el producto mas entregado corresponde al id_material 2 con 10 unds entregadas, espero te sea útil para lo que quieres:
select — Finalmente obtengo la fila 1 que es el material mas entregado.
mas_ent.*
from (
select — Aqui agrego un numero de fila al resultado
rownum fila,
may.*
from (
select — En esta subquery ordeno por cant_entregada descendente
dat.*
From (
select — Creo una tabla ficticia, tu debes reeemplazarla por tu tabla o tablas con los detalles de materiales comprados.
mat.id_material,
mat.descripcion,
sum(mat.cant) cant_entregada
from (
select 1 id_material, ‘material 1’ descripcion, 1 cant from dual
union all
select 1 id_material, ‘material 1’ descripcion, 2 cant from dual
union all
select 2 id_material, ‘material 2’ descripcion, 3 cant from dual
union all
select 2 id_material, ‘material 2’ descripcion, 1 cant from dual
union all
select 2 id_material, ‘material 2’ descripcion, 6 cant from dual
union all
select 3 id_material, ‘material 3’ descripcion, 1 cant from dual
union all
select 4 id_material, ‘material 4’ descripcion, 2 cant from dual
union all
select 4 id_material, ‘material 4’ descripcion, 1 cant from dual
) mat
group by
mat.id_material,
mat.descripcion
) dat
order by
dat.cant_entregada desc
) may
) mas_ent
where mas_ent.fila = 1;
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle
BUENAS. ESTA MUY BUENO TU BLOG, YO NECESITO HACER TU MISMO EJEMPLO PERO Q ME DE COMO RESULTADO EL DEPARTAMENTO CON EL SUELDO MAS ALTO. ESPERO TU AYUDA. MI CASO ES UN CALCULAR EL MAYOR DE UNA SUMA AGRUPADAD
Hola Jhonny, gracias por comunicarte y por tu comentario, tengo un vídeo donde explico ‘Como Obtener el Artículo mas Comprado’ y creo que calza muy bien con el problema que tienes, este es el link: https://dominatuspackagesen0racle.com/?p=877
PD: Ya obtuviste mi libro-reporte sobre “Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos”, si aun no lo tienes puedes obtenerlo desde este enlace:
https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
HM DEL 3 EJERCICIO QUISIERA SABER, QUE PARA SABER LA CANTIDAD DE EMPLEADOS POR DEPARTAMENTO, PERO INGRESANDO DESDE LA PANTALLA CON EL NOMBRE DE DEPARTAMENTO ME DARA RESULTADO EL NUMERO DE EMPLEADO OSEA USANDO UN EJECUTOR QUE ME VOTE LA PANTALLITA PARA INGRESAR EL NOMBRE DEL DEPARTAMENTO QUE QUIERO SABER
Hola Kamilita, gracias por comunicarte, claro que puedes hacerlo en dos pasos, primero busca el nombre del departamento (que ingresaron por pantalla) en la tabla departamentos para obtener el código y luego con el código vas a contar a la tabla de empleados la cantidad de empleados que hay en ese departamento, algo como lo siguiente:
select id_depto into lin_id_depto from t_departamentos where nombre_dep = ‘nombre ingresado’;
select count(1) cant_empleados from t_empleados where id_depto = lin_id_depto;
PD: Ya viste mi libro-reporte sobre “Cómo Crear un SELECT Eficiente en ORACLE en Solo 7 Pasos”, si aun no lo tienes en tus manos puedes obtenerlo gratis desde aquí: https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.