Para comenzar vamos a los conceptos:
- Having es usando conjuntamente con GROUP BY.
- Funciones que se puede combinar:
- SUM: Cuando requieras agrupar por cantidades que se acumulan y suman.
- COUNT: Cuando quieras buscar cantidades de registros sin sumar.
- MIN: Cuando requieras todos los registros mínimos a su valor.
- MAX: Cuando requieras todos los registros mínimos a su valor.
Vamos con unos ejemplos, tenemos la siguiente tabla simple:
1.- SUM: Queremos obtener la suma de total de temperatura por cada ciudad, lo podemos hacer con el siguiente query;
SELECT ciudad, SUM(temperatura) from
muestras GROUP BY ciudad HAVING SUM(temperatura);
Y si queremos sólo los que cumples que tengan más de 50 de total sumado de temperatura sólo le agregamos al final:
SELECT ciudad, SUM(temperatura) from
muestras GROUP BY ciudad HAVING SUM(temperatura)>50;
2.- COUNT: Si quisiéramos saber cuantas veces se repite cada registro sólo hacemos la siguiente consulta:
SELECT ciudad, COUNT(temperatura) from muestras GROUP BY ciudad HAVING COUNT(temperatura);
Ahora si queremos sólo las que tienen registros mayores a 2, esta es la consulta:
SELECT ciudad, COUNT(temperatura) from
muestras GROUP BY ciudad HAVING COUNT(temperatura)>2;
3.- MAX y MIN: Si quisiéramos saber cuanto es el máximo de cada uno de los registros pero no repetidos hacemos la siguiente consulta:
SELECT ciudad, MAX(temperatura) FROM muestras
GROUP BY ciudad HAVING MAX(temperatura);
Ahora si sólo queremos los mayores a 16 haríamos lo siguiente:
SELECT ciudad, MAX(temperatura) FROM muestras GROUP BY ciudad HAVING MAX(temperatura)>16;
Para mínimo es la misma lógica.
Ahora se atreven a dar el examen y dar un respuesta? Espero esté todo claro. Espero verlos muy pronto.
PD: La misma idea funciona para la base de datos MySQL.
El código de la tabla y registro es el siguiente:
CREATE TABLE `muestras` (
`ciudad` varchar(40) DEFAULT NULL,
`fecha` date DEFAULT NULL,
`temperatura` number(4) DEFAULT NULL
) ;
INSERT INTO `muestras` (`ciudad`, `fecha`, `temperatura`) VALUES
('Madrid', '2005-03-17', 23),
('París', '2005-03-17', 16),
('Berlín', '2005-03-17', 15),
('Madrid', '2005-03-18', 25),
('Madrid', '2005-03-19', 24),
('Berlín', '2005-03-19', 18);
No hay comentarios:
Publicar un comentario