2. Funciones de agregación Una función de agregación es una función que a partir de uno o muchos valores retorna uno y sólo uno.
3. Funciones de agregación A partir de una tabla con muchas filas, es posible mostrar un número reducido de filas, gracias a las funciones de agregación . Desde ese punto de vista, es posible considerar a las funciones de agregación como totalizadoras o sumarizadoras. Sum ()
4. Funciones de agregación vs. operadores No confundir una función de agregación (e.g. Sum() ) con un operador (e.g. + ) !! a + b Sum (a) Sum (b)
5.
6. Funciones de agregación vs. operadores: ejemplo + es una operación entre columnas de una misma fila Sum () es una operación entre filas de una misma columna
7.
8. Funciones de agregación Select sum(x) From Agg Cuando se utilizan funciones de agregación, SQL Server no le coloca nombre a la columna. Es recomendable utilizar un alias. Select avg(x) as avg From Agg
9. Funciones de agregación Una misma columna puede agregarse simultáneamente con distintas funciones Select max(x) as max, min(x) as min From Agg
10. Funciones de agregación: count vs. count distinct El count distinct primero elimina los duplicados y luego cuenta Select count (x) as count, count (distinct x) as [count distinct] From Agg
11. Funciones de agregación Select sum (x) as sum, avg (x) as avg, min (x) as min, max (x) as max, count (x) as count, count (distinct x) as [count distinct] From Agg
12. Funciones de agregación: Ejercicio Mostrar el promedio de los valores sin usar la función avg () . Select sum (x) / count (x) as avg , From Agg El promedio de valores enteros no siempre es entero ! Select sum (x) * (1.0) / count (x) as avg , From Agg
13. Funciones de agregación: total general vs. subtotales A veces es útil calcular un total general ... Select sum (ventas$) as sum, From Agg
14. Funciones de agregación: total general vs. subtotales ... pero muy a menudo se precisan totales intermedios Select año, sum (ventas$) as ventas From Ventas Group by año
15. Funciones de agregación: Group by Select … Group by año Select …año, sum(ventas$) as ventas Group by año
16.
17. Funciones de agregación: Group by Mostrar las ventas por provincia Select codProv, Provincia, sum (ventas$) as ventas From Ventas Group by codProv Server: Msg 8120, Level 16, State 1, Line 1 Column 'Ventas.Provincia' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
18. Funciones de agregación: Group by Select … Group by codProv Select codProv, Provincia, sum(ventas$) as ventas
19. Funciones de agregación: Group by Mostrar las ventas por provincia Select codProv, Provincia, sum (ventas$) as ventas From Ventas Group by codProv, Provincia
20. Funciones de agregación: Group by Select … Group by codProv, Provincia Select codProv, Provincia, sum(ventas$) as ventas
21.
22. Funciones de agregación: Group by: Ejercicio 1 unid_vend: unidades vendidas Mostrar la cantidad de ventas realizadas por cada empleado Select legajo, nombre, count (unid_vend) as cant From Ventas Group by legajo, nombre
23. Funciones de agregación: Group by: Ejercicio 2 Mostrar la cantidad de ventas realizadas por cada empleado Select Empleado.legajo, nombre, count (unid_vend) as cant From Ventas Inner Join Empleado On Empleado.Legajo = Ventas.Legajo Group by Empleado.legajo, nombre
27. Funciones de agregación: Where vs. Having Select factura, sum(total) Group by factura … Having sum(total) > 100 La cláusula Having se utiliza para poner condiciones que se apliquen luego del group by, es decir, sobre los grupos formados. Select factura, sum(total) Group by factura Having sum(total) > 100
28. Funciones de agregación: Where vs. Having Select factura, sum(total) Where total > 25 Group by factura Having sum(total) > 100 Where total > 25 Select factura, sum(total) Group by factura Having sum(total) > 100
29. Funciones de agregación: Where vs. Having Where Group by Having Where se aplica sobre la tabla original Having se aplica sobre los grupos formados
30. Select: claúsula From Select <columna(s)> From <tabla(s)> Where <condicione(s)> Dentro de la sentencia Select, la cláusula From se utiliza para indicar de qué tablas se quiere obtener la información. Referencia como mínimo a una tabla, aunque puede incluir varias El resultado del Select es siempre UNA tabla
31. Select: claúsula From Cuando quieren obtenerse datos que están distribuidos en varias tablas, es preciso juntarlas. Eso es lo que se conoce como Join Select <columna(s)> From <tabla 1 > Join <tabla 2 > On <condición> Where <condicione(s)>
32. Tipos de Join Tipos de Join Cuando quieren obtenerse datos que están distribuidos en varias tablas, es preciso juntarlas. Eso es lo que se conoce como Join Cross Join Inner Join Outer Join Left Outer Join Right Outer Join Full Outer Join
34. Inner Join: elementos comunes a ambas tablas S elect * F rom Compra Cross Join Articulo;
35. Inner Join: elementos comunes a ambas tablas S elect * F rom Compra Cross Join Articulo Where cod = cod ; Si las dos tablas tienen una columna con el mismo nombre, para utilizarla hay que referirla de la forma tabla.columna Server: Msg 209, Level 16, State 1, Line 1 Ambiguous column name 'cod'. Server: Msg 209, Level 16, State 1, Line 1 Ambiguous column name 'cod'.
36. Inner Join: elementos comunes a ambas tablas S elect * F rom Compra Cross Join Articulo Where compra.cod = articulo.cod ; Un Cross Join con un Where y un Inner Join dan el mismo resultado S elect * F rom Compra Inner Join Articulo On compra.cod = articulo.cod ; ... ó ...
37. Inner Join: elementos comunes a ambas tablas S elect cod, cant, nombre F rom Compra Inner Join Articulo On compra.cod = articulo.cod ; Server: Msg 209, Level 16, State 1, Line 1 Ambiguous column name 'cod'.
38. Inner Join: elementos comunes a ambas tablas No es obligatorio prefijar todas las columnas. Sólo las ambiguas S elect compra.cod , cant, nombre F rom Compra Inner Join Articulo On compra.cod = articulo.cod ; S elect articulo.cod , cant, nombre F rom Compra Inner Join Articulo On compra.cod = articulo.cod ; ... ó ...
39. Outer Join: elementos sin correspondencia Un Left Outer Join trae todas las filas de la primera tabla, tengan o no coincidencia en la segunda tabla, y completando con valores nulos donde sea necesario. S elect * F rom Compra Left Outer Join Articulo On compra.cod = articulo.cod ; ?
40. Outer Join: elementos sin correspondencia Un Right Outer Join trae todas las filas de la segunda tabla, tengan o no coincidencia en la primera tabla, y completando con valores nulos donde sea necesario. S elect * F rom Compra Right Outer Join Articulo On compra.cod = articulo.cod ; ?
41. Outer Join: elementos sin correspondencia Un Left Outer Join y un Right Outer Join son igualmente potentes. S elect * F rom Compra Left Outer Join Articulo On compra.cod = articulo.cod ; ? S elect * F rom Articulo Right Outer Join Compra On compra.cod = articulo.cod ; ... ó ...
42. Outer Join: elementos sin correspondencia Un Left Outer Join y un Right Outer Join son igualmente potentes. S elect * F rom Compra Full Outer Join Articulo On compra.cod = articulo.cod ; ? ?
44. Tipos de Join: resumen ? ? Compra Left Outer Join Articulo
45. Tipos de Join: resumen ? ? Compra Right Outer Join Articulo
46. Tipos de Join: resumen ? ? Compra Full Outer Join Articulo
47. Tipos de Join: ejercicio Mostrar las ventas indicando en qué ciudad ocurrieron. Excluir las ciudades sin ventas y las ventas que no se sabe en dónde ocurrieron Select C iudad .codCiudad, ciudad, monto From Ciudad Inner Join Ventas on C iudad .codCiudad = Ventas .codCiudad
48. Tipos de Join: ejercicio Mostrar las ventas indicando en qué ciudad ocurrieron. Excluir las ciudades sin ventas, pero no excluir ninguna venta. Si no se conoce la descripcion de una ciudad, mostrar aunque sea el ID Select Ventas .codCiudad, ciudad, monto From Ciudad Right Outer Join Ventas on C iudad .codCiudad = Ventas .codCiudad
49. Cross Join: sintaxis alternativa S elect * F rom Compra Cross Join Articulo; S elect * F rom Compra , Articulo; ... ó ... El operador , que se aplica a tablas es equivalente al Cross Join
50. Inner Join: elementos comunes a ambas tablas S elect * F rom Compra Cross Join Articulo Where compra.cod = articulo.cod ; S elect * F rom Compra Inner Join Articulo On compra.cod = articulo.cod ; ... ó ... S elect * F rom Compra , Articulo Where compra.cod = articulo.cod ; ... ó ...