Mostrando entradas con la etiqueta SUM. Mostrar todas las entradas
Mostrando entradas con la etiqueta SUM. Mostrar todas las entradas

viernes, 15 de febrero de 2013

DB2 - Funciones agregadas

Las funciones agregadas reciben un conjunto de valores y devuelven un resultado de valor único para el conjunto de valores de entrada.

COUNT: devuelve el número de filas o valores de un conjunto de filas o valores. ALL es la opción por defecto, la que se aplica si se omite, e implica que la función se realiza sobre el conjunto de valores tras eliminar los nulos. Si se especifica DISTINCT, los valores duplicados se eliminan también.

 

SELECT COUNT(*)        
FROM "SYSIBM".SYSTABLES
WHERE CREATOR = 'SYSIBM' 


COUNT_BIG: el comportamiento es igual a COUNT excepto que el resultado puede ser mayor que el valor máximo de un entero. ALL es la opción por defecto, la que se aplica si se omite, e implica que la función se realiza sobre el conjunto de valores tras eliminar los nulos. Si se especifica DISTINCT, los valores duplicados se eliminan también.

 

SELECT COUNT_BIG(*)      
FROM "SYSIBM".SYSTABLES  
WHERE CREATOR = 'SYSIBM'   



SUM: devuelve la suma de un conjunto de números. ALL es la opción por defecto, la que se aplica si se omite, e implica que la función se realiza sobre el conjunto de valores tras eliminar los nulos. Si se especifica DISTINCT, los valores duplicados se eliminan también.



SELECT SUM(COLCOUNT)   
FROM "SYSIBM".SYSTABLES
WHERE CREATOR = 'SYSIBM' 


MAX: devuelve el valor máximo de un conjunto de valores. ALL es la opción por defecto, la que se aplica si se omite, e implica que la función se realiza sobre el conjunto de valores tras eliminar los nulos. Si se especifica DISTINCT, los valores duplicados se eliminan también.



SELECT MAX(COLCOUNT)    
FROM "SYSIBM".SYSTABLES 
WHERE CREATOR = 'SYSIBM' 

MIN: devuelve el valor mínimo de un conjunto de valores. ALL es la opción por defecto, la que se aplica si se omite, e implica que la función se realiza sobre el conjunto de valores tras eliminar los nulos. Si se especifica DISTINCT, los valores duplicados se eliminan también.



SELECT MIN(COLCOUNT)    
FROM "SYSIBM".SYSTABLES 
WHERE CREATOR = 'SYSIBM'


AVG: devuelve el promedio de un conjunto de números. ALL es la opción por defecto, la que se aplica si se omite, e implica que la función se realiza sobre el conjunto de valores tras eliminar los nulos. Si se especifica DISTINCT, los valores duplicados se eliminan también.

 

SELECT AVG(COLCOUNT)   
FROM "SYSIBM".SYSTABLES
WHERE CREATOR = 'SYSIBM'


VARIANCE o VARIANCE_SAMP: devuelve la varianza sesgada (/ n) de un conjunto de números. la VARIANCE_SAMP función devuelve la varianza de muestra (/ n-1) de un conjunto de números. ALL es la opción por defecto, la que se aplica si se omite, e implica que la función se realiza sobre el conjunto de valores tras eliminar los nulos. Si se especifica DISTINCT, los valores duplicados se eliminan también.

En teoría de probabilidad, la varianza de una variable aleatoria es una medida de dispersión definida como la esperanza del cuadrado de la desviación de dicha variable respecto a su media. Está medida en unidades distintas de las de la variable. Por ejemplo, si la variable mide una distancia en metros, la varianza se expresa en metros al cuadrado. La varianza tiene como valor mínimo 0. 



SELECT VARIANCE(COLCOUNT)
FROM "SYSIBM".SYSTABLES 
WHERE CREATOR = 'SYSIBM'  

  
COVARIANCE o COVARIANCE_SAMP: devuelve la covarianza (población) de un conjunto de pares de números.

La covarianza es una medida de dispersión conjunta de dos variables estadísticas. Por definición, mide el valor esperado del producto de las desviaciones con respecto a la media. 

  • Si > 0 hay dependencia directa (positiva), es decir, a grandes valores de x corresponden grandes valores de y.
  • Si = 0 se interpreta como la no existencia de una relación lineal entre las dos variables estudiadas.
  • Si < 0 hay dependencia inversa o negativa, es decir, a grandes valores de x corresponden pequeños valores de y.



SELECT COVARIANCE(COLCOUNT,KEYCOLUMNS)
FROM "SYSIBM".SYSTABLES               
WHERE CREATOR = 'SYSIBM'            
  
 
STDDEV o STDDEV_SAMP: devuelve la desviación estándar (/ n), o la desviación estándar de la muestra (/ n-1), de un conjunto de números. ALL es la opción por defecto, la que se aplica si se omite, e implica que la función se realiza sobre el conjunto de valores tras eliminar los nulos. Si se especifica DISTINCT, los valores duplicados se eliminan también.

La desviación estándar es una medida del grado de dispersión de los datos con respecto al valor promedio. Dicho de otra manera, la desviación estándar es simplemente el "promedio" o variación esperada con respecto a la media aritmética. Por ejemplo, las tres muestras (0, 0, 14, 14), (0, 6, 8, 14) y (6, 6, 8, 8) cada una tiene una media de 7. Sus desviaciones estándar muestrales son 8.08, 5.77 y 1.15 respectivamente. La tercera muestra tiene una desviación mucho menor que las otras dos porque sus valores están más cerca de 7.



SELECT STDDEV(COLCOUNT)   
FROM "SYSIBM".SYSTABLES   
WHERE CREATOR = 'SYSIBM'   


CORRELATION: devuelve el coeficiente de la correlación de un conjunto de pares de números.

En probabilidad y estadística, la correlación indica la fuerza y la dirección de una relación lineal y proporcionalidad entre dos variables estadísticas.  La correlación entre dos variables no implica, por sí misma, ninguna relación de causalidad.



SELECT CORRELATION(COLCOUNT,KEYCOLUMNS)
FROM "SYSIBM".SYSTABLES               
WHERE CREATOR = 'SYSIBM'      


Fuentes: SQL Reference (SC19-2983-03) IBM y Wikipedia

lunes, 16 de mayo de 2011

Sort vol.5.1: SUM. Averiguar registros duplicados

Hola. Os dejo un jcl que os puede sacar de un apuro en más de una ocasión (a mí me salvó más de una vez).
Se trata de un procesito fácil, barato y para toda la familia, que nos permite averiguar que registros de un fichero están duplicados, cuales no y cuantos son.

Como siempre, para que quede más claro seguiré un ejemplo práctico, válido para cualquier caso:

Supongamos que tenemos el siguiente fichero con los duplicados:


----+----1----+----2----+----3----+----4----+----5----
***************************** Top of Data ************
000000001JOSE      LOPEZ     PITA     AUTONOMO        
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO      
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO      
000000003CARLOS    PEREZ     FANO     AUTONOMO        
000000004CARLOS    POLO      DEL BARROAUTONOMO        
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO        
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO        
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO        
000000006ANTONIO   VILLA     SUSO     AUTONOMO        
000000007FULANITO  VILLA     SUSO     AUTONOMO 
...


Vemos que Javier y Yolanda salen repetidos, Yolanda icluso viene 3 veces. A simple vista los vemos porque el ejemplo está preparado para ello, pero imaginate que el fichero tuviera 100.000 registros y solo 2 duplicados, se complica la búsqueda no? continuamos:

PASO1 - Lo primero que haremos será ordenar el fichero por la clave (en este caso son las primeras 9 posiciones) y después poner un 1 al final de cada uno de los registros del fichero, para ello:


//PASO001  EXEC SORTD
//SYSOUT   DD SYSOUT=*
//SORTIN   DD DSN=nombre_fichero_con_diplicados1,DISP=SHR
//SORTOUT  DD DSN=nombre_fichero_salida1_paso001,
//            DISP=(,CATLG),
//            SPACE=(CYL,(100,100),RLSE)
//SYSIN    DD *
 SORT FIELDS=(1,9,ZD,A)
 OUTREC FIELDS=(1,54,C'1')


El fichero quedará del siguiente modo:


----+----1----+----2----+----3----+----4----+----5----+
***************************** Top of Data *************
000000001JOSE      LOPEZ     PITA     AUTONOMO        1
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO      1
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO      1
000000003CARLOS    PEREZ     FANO     AUTONOMO        1
000000004CARLOS    POLO      DEL BARROAUTONOMO        1
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO        1
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO        1
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO        1
000000006ANTONIO   VILLA     SUSO     AUTONOMO        1
000000007FULANITO  VILLA     SUSO     AUTONOMO        1
...


PASO2 - Ahora lo que haremos será agrupar los registros por clave y utilizar el numeríto (1) que hemos introducido para sumar los registros que agrupemos:


//PASO002  EXEC SORTD
//SYSOUT   DD SYSOUT=*
//SORTIN   DD DSN=nombre_fichero_salida1_paso001,DISP=SHR
//SORTOUT  DD DSN=nombre_fichero_salida,
//            DISP=(,CATLG),
//            SPACE=(CYL,(100,100),RLSE)
//SYSIN    DD *
 SORT FIELDS=(1,9,ZD,A)
 SUM FIELDS=(55,1,ZD)


Obtendremos el resultado siguiente:


----+----1----+----2----+----3----+----4----+----5----+
***************************** Top of Data *************
000000001JOSE      LOPEZ     PITA     AUTONOMO        1
000000002JAVIER    MARTINEZ  CARRETEROASALARIADO      2
000000003CARLOS    PEREZ     FANO     AUTONOMO        1
000000004CARLOS    POLO      DEL BARROAUTONOMO        1
000000005YOLANDA   LOPEZ     ALONSO   AUTONOMO        3
000000006ANTONIO   VILLA     SUSO     AUTONOMO        1
000000007FULANITO  VILLA     SUSO     AUTONOMO        1
...


Bien, ahora simplemente hacemos busquedas en el fichero teniendo en cuenta lo siguiente:
- Si el numerito introducido al final de cada registro no ha variado (si vale 1), quiere decir que el registro no está duplicado
- Si ha variado el valor querra decir que el registro estaba duplicado y nos dirá el número de veces que está duplicado.

Según el ejemplo vemos como Javier tiene un 2 porque está repetido dos veces, Yolanda tiene un 3 porque está repetida 3 veces, y el resto tienen un 1 porque no están repetidos.

Así de facil!

Otros casos útiles:

En algunas ocasiones queremos camparar dos ficheros para encontrar las direfencias, por ejemplo, suponte que deberían de ser iguales pero uno de ellos tiene 3 registros más que el otro, y que esto pueda ser debido algún registro duplicado.
Para resolverlo, podéis aplicar este mismo método, aplicando el PASO1 a los dos ficheros y luego metiendo los dos ficheros en el PASO2. Te dirá que registros son únicos(tanto de un fichero como del otro), cuales no lo són y el número de los que estén repetidos.

Espero que os haya servido, no obstante cualquier duda comentarla.