SQL - script - agrupamiento
From Ibbddunq
Line 27: | Line 27: | ||
== Ahora sí, agrupamiento == | == Ahora sí, agrupamiento == | ||
- | Motivación | + | === Motivación === |
- | * cantidad de actos y duración total de '''cada''' función, | + | Ahora quiero |
+ | * cantidad de actos y duración total de '''cada''' función, | ||
+ | * cantidad de artistas/menor destreza de '''cada''' acto. | ||
+ | === Concepto === | ||
Para eso tendría que separar (ponele) la tabla formaParte en pedacitos, cada pedacito son las filas de una función. | Para eso tendría que separar (ponele) la tabla formaParte en pedacitos, cada pedacito son las filas de una función. | ||
Line 36: | Line 39: | ||
Destacar la diferencia entre agrupar y seleccionar (filtrar = seleccionar). | Destacar la diferencia entre agrupar y seleccionar (filtrar = seleccionar). | ||
+ | === Sintaxis y primeros ejemplos === | ||
Ahora sí, sintaxis: GROUP BY, funciones que actúan sobre agrupados. | Ahora sí, sintaxis: GROUP BY, funciones que actúan sobre agrupados. | ||
Line 52: | Line 56: | ||
group by diaFn, horaFn | group by diaFn, horaFn | ||
order by diaFn, horaFn; | order by diaFn, horaFn; | ||
+ | 3 | ||
+ | -- funcion con cantidad de actos de duracion mala ... facil! | ||
+ | -- ... de aca ... | ||
+ | select diaFn, horaFn, duracion, dmin, dmax, duracion-dmin, dmax-duracion | ||
+ | from formaParte | ||
+ | natural join acto | ||
+ | where duracion-dmin < 0 or dmax-duracion < 0 | ||
+ | order by diaFn, horaFn, nroOrden; | ||
+ | -- ... agrupamos ... | ||
+ | select diaFn, horaFn, duracion, count(nroOrden) | ||
+ | from formaParte | ||
+ | natural join acto | ||
+ | where duracion-dmin < 0 or dmax-duracion < 0 | ||
+ | group by diaFn, horaFn | ||
+ | order by diaFn, horaFn, nroOrden; | ||
+ | 4 | ||
+ | Otros que inventemos, se me ocurren | ||
+ | * cantidad de artistas y menor/mayor/promedio/dispersión de destreza para cada acto | ||
+ | * cuánta guita pienso recaudar en cada ciudad / en cada provincia | ||
+ | * cantidad de ciudades y población total en cada provincia | ||
+ | |||
== HAVING == | == HAVING == | ||
HAVING, con qué criterio poner condiciones en el HAVING o en el WHERE. | HAVING, con qué criterio poner condiciones en el HAVING o en el WHERE. |
Revision as of 21:04, 24 April 2009
Contents |
Empezamos con funciones
A las funciones que vimos hasta ahora les alcanza con mirar fila por fila:
- DAY (=DAYOFMONTH) / MONTH / YEAR
- operaciones matemáticas
- IFNULL(valor1,valor que va si el valor1 es null)
- ... alguna otra que se nos ocurra
Ahora, también tenemos estas funciones
COUNT / SUM / AVG / MAX / MIN
que no se pueden evaluar para una fila sola, el MAX es el máximo de todas las filas del resultado, y así siguiendo.
P.ej.
-- cantidad de actos y duracion total de una funcion select diaFn, horaFn, max(nroOrden), sum(duracion) from formaParte where diaFn = 20080615 and horaFn = 20;
o
-- acto, grado de peligrosidad, cantidad de artistas que lo pueden hacer -- menor destreza, para el acto de los leones select nomActo, gradoPel, count(nomArt), min(destreza) from (acto natural join puedeParticipar) where nomActo = "leones";
(cómo obtener el artista de menor destreza ... para eso falta un rato)
Ahora sí, agrupamiento
Motivación
Ahora quiero
- cantidad de actos y duración total de cada función,
- cantidad de artistas/menor destreza de cada acto.
Concepto
Para eso tendría que separar (ponele) la tabla formaParte en pedacitos, cada pedacito son las filas de una función.
Dar la visión de "tabla de agrupados", o sea, visión conceptual de tabla donde cada fila representa un grupo de filas de la tabla original. Entonces de cada grupo sí tiene sentido el count, el min, el max, etc..
Destacar la diferencia entre agrupar y seleccionar (filtrar = seleccionar).
Sintaxis y primeros ejemplos
Ahora sí, sintaxis: GROUP BY, funciones que actúan sobre agrupados.
Ejemplos: 1
-- cantidad de actos y duracion total de cada funcion select diaFn, horaFn, count(nroOrden), sum(duracion) from formaParte group by diaFn, horaFn order by diaFn, horaFn;
2
-- cantidad de actos y duracion total de cada funcion que empieza a las 20 horas select diaFn, horaFn, count(nroOrden), sum(duracion) from formaParte where horaFn = 20 group by diaFn, horaFn order by diaFn, horaFn;
3
-- funcion con cantidad de actos de duracion mala ... facil! -- ... de aca ... select diaFn, horaFn, duracion, dmin, dmax, duracion-dmin, dmax-duracion from formaParte natural join acto where duracion-dmin < 0 or dmax-duracion < 0 order by diaFn, horaFn, nroOrden; -- ... agrupamos ... select diaFn, horaFn, duracion, count(nroOrden) from formaParte natural join acto where duracion-dmin < 0 or dmax-duracion < 0 group by diaFn, horaFn order by diaFn, horaFn, nroOrden;
4 Otros que inventemos, se me ocurren
- cantidad de artistas y menor/mayor/promedio/dispersión de destreza para cada acto
- cuánta guita pienso recaudar en cada ciudad / en cada provincia
- cantidad de ciudades y población total en cada provincia
HAVING
HAVING, con qué criterio poner condiciones en el HAVING o en el WHERE.