Archivado el Julio, 2008



Carlos A. García

Tabla de países

Autor: Carlos A. García. Archivado en Oracle
31/Jul/2008  

¿Qué hay más común a todas las aplicaciones que una tabla de países? Cuelgo un script para crear una tabla de países indexada por el nombre (es el campo más normal de búsqueda). Está creada por índice para que sea más rápido y ocupe menos espacio. El script incluye datos de países (nombre, nombre en inglés, código iso, código iata, etc.)

script_paises

Carlos A. García

Funciones de agrupación en Oracle

Autor: Carlos A. García. Archivado en Oracle
30/Jul/2008  

El otro día, revisando las estadísticas del blog, me di cuenta que mucha gente llega a él buscando información sobre funciones de agrupación en Oracle. Así que intentaré explicarlo lo mejor que sepa …
En Oracle hay dos tipos de funciones: funciones de fila única (single row functions) y funciones de agrupación (aggregate functions). La diferencia fundamental es que mientras las primeras realizan la acción sobre una única fila cada vez, las de agrupación obtienen un resultado a partir de un conjunto de elementos.
Se trata de seleccionar un conjunto de elementos, filtrarlos por las condiciones que creamos oportunas y obtener un resultado a partir de él. ¿Cuál es el salario medio de los trabajadores de una empresa? ¿Y el máximo por departamento? ¿Cómo obtener un determinado percentil de una distribución? Todo esto se consigue gracias a este tipo de funciones.
Cojamos la más tipica de las funciones de agrupción: count. Esta función sirve para contar el número de registros o filas que recuperamos de la base de datos. Por ejemplo, para contar todos los empleados de una empresa (el * indica que cogemos toda la fila):

select count(*)
from empleados

¿Cómo filtrar y conseguir el número de empleados por departamento? Para ello debemos crear la agrupación, que en este caso se especificará indicando el código del departamento al que pertenece el empleado. Dicho de otra forma: creamos conjuntos de empleados por departamento y luego contamos cada conjunto. Algo así:

select count(*), departamento
from empleados
group by departamento

No se puede contar algo que no está agrupado. El código siguiente es erróneo:

select count(*), departamento
from empleados

Si queremos filtrar por la función de agrupación, debemos utilizar la cláusula HAVING. Utilizar WHERE nos producirá un error. Por ejemplo, si queremos contar los empleados de los departamentos que tengan más de 10 empleados:

select count(*), departamento
from empleados
group by departamento
having count(*) > 10

En fin, que se puede complicar tanto como necesitemos. Sólo un consejo: tened en cuenta el tipo de datos sobre el que queréis realizar la agrupación. No es lo mismo obtener el máximo de una columna numérica ( 10 es mayor que 9, por ejemplo) que de una alfanumérica (alfabéticamente, la cadena de caracteres ’10′ es menor que la cadena ’9′, por ejemplo).

Carlos A. García

Cuarto tema curso de Oracle para programadores

Autor: Carlos A. García. Archivado en General
29/Jul/2008  

Índices, tablas basadas en índices … interesantísimo el tema tratado por Carlos Stoverock en clase.

tema-4-andices-y-demas