SQL

Tutorial SQL: Filtrado de grupos de resultados con HAVING

SQL having: filtrado de resultados. Domina el filtrado de resultados en SQL utilizando la cláusula HAVING con ejemplos prácticos y detallados.

En SQL, la cláusula HAVING se usa principalmente en conjunto con GROUP BY para filtrar los resultados de grupos que no cumplen ciertas condiciones. Es similar a la cláusula WHERE, pero mientras WHERE filtra las filas individuales, HAVING filtra los grupos.

Estructura básica de HAVING:

SELECT columna1, columna2, ... 
FROM tabla
WHERE condicion
GROUP BY columna1, columna2, ... 
HAVING condicion;

Ejemplo 1: Uso simple de HAVING

Se tiene una tabla de Pedidos que tiene la siguiente estructura:

PedidoID ProductoID ClienteID Cantidad
1 30 3 2
2 10 2 1
3 20 1 5
4 30 2 3
5 10 3 2
6 20 1 1
7 30 2 2
8 10 3 4

Objetivo: Encontrar los ProductoID que se han pedido más de 4 veces. 

Consulta:

SELECT ProductoID, SUM(Cantidad) as TotalPedidos
FROM Pedidos
GROUP BY ProductoID
HAVING SUM(Cantidad) > 4;

Esta consulta agrupa los pedidos por ProductoID y luego utiliza HAVING para filtrar aquellos grupos cuya cantidad total es mayor a 4.

ProductoIDTotalPedidos
307
107
206

Aquí, vemos que cada uno de los productos (30, 10, 20) tiene un total de pedidos que excede el umbral de 4. Por ejemplo, el ProductoID 30 tiene un total de 7 pedidos, lo cual es la suma de las cantidades de pedidos (2 + 3 + 2) para ese producto en la tabla de Pedidos.

Ejemplo 2: Uso de HAVING con WHERE

Objetivo: Filtrar pedidos del ClienteID 3 y encontrar productos pedidos más de 3 veces. 

Consulta:

SELECT ProductoID, SUM(Cantidad) as TotalPedidos
FROM Pedidos
WHERE ClienteID = 3
GROUP BY ProductoID
HAVING SUM(Cantidad) > 3;

Primero se filtran las filas para el ClienteID 3 con WHERE, luego se agrupan por ProductoID, y finalmente se filtran los grupos con HAVING.

ProductoIDTotalPedidos
106

Aquí, el ProductoID 10 es el único producto que cumple con la condición de ser pedido más de 3 veces por el ClienteID 3. Este resultado se obtiene sumando las cantidades de pedidos del ProductoID 10 hechos por el ClienteID 3 (2 + 4).

Errores comunes y soluciones

  • Un error común es usar HAVING sin GROUP BY, lo que puede llevar a resultados confusos. Siempre asegúrate de que HAVING se use en conjunto con GROUP BY.
  • Otro error es confundir las condiciones que deben ir en WHERE con las que pertenecen a HAVING. Recuerda que WHERE se aplica antes del agrupamiento, y HAVING después.

Conclusión

La cláusula HAVING es una herramienta muy útil en SQL cuando es necesario filtrar grupos de datos en lugar de filas individuales. Sin embargo, se debe tener cuidado al utilizar HAVING sin GROUP BY, ya que los resultados pueden ser confusos y es probable que no sea lo que realmente se desea en la mayoría de las situaciones.

Certifícate en SQL con CertiDevs PLUS

Ejercicios de esta lección Filtrado de grupos de resultados con HAVING

Evalúa tus conocimientos de esta lección Filtrado de grupos de resultados con HAVING con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Actualización de datos: UPDATE

Código

Creación y uso de procedimientos almacenados

Test

Uso de funciones agregadas: COUNT, SUM, AVG, MAX, MIN

Test

Tipos de datos

Test

Uso de índices y particiones

Test

Uso de vistas

Test

Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN

Test

Sentencias INSERT

Código

Creación y uso de subqueries

Test

Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN

Código

Instalación de MySQL

Test

Relaciones entre tablas

Código

Clasificación de resultados con ORDER BY

Test

Creación y manejo de usuarios y roles

Test

Eliminación de datos: DELETE

Código

Creación y uso de funciones

Test

Vaciar tablas y bases de datos: DROP

Test

Consultas básicas de selección: SELECT y WHERE

Test

Creación de bases de datos y tablas

Código

Filtrado de valores únicos con DISTINCT

Test

Alterar la estructura de tablas existentes: ALTER TABLE

Test

Creación de tablas e inserción de datos con SQL

Proyecto

Asignación y gestión de permisos

Test

Optimización de consultas

Test

Introducción a SQL

Test

Triggers y eventos

Test

Copias de seguridad y restauración de bases de datos

Test

Filtrado de grupos de resultados con HAVING

Test

Eliminación de datos: DELETE

Test

Inserción de datos: INSERT INTO

Test

Instalación de PostgreSQL

Test

Agrupación de resultados con GROUP BY

Test

Actualización de datos: UPDATE

Test

Renombrar tablas y bases de datos: RENAME

Test

Creación de bases de datos y tablas: CREATE DATABASE, CREATE TABLE

Test

Bases de datos y tablas

Test

Consultas básicas de selección SELECT y WHERE

Código

Relaciones entre tablas

Test

Todas las lecciones de SQL

Accede a todas las lecciones de SQL y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A Sql

Introducción Y Entorno

Sublenguajes De Sql: Data Definition Language Y Data Manipulation Language

Introducción Y Entorno

Instalación De Mysql

Introducción Y Entorno

Instalación De Postgresql

Introducción Y Entorno

Tipos De Datos

Introducción Y Entorno

Bases De Datos Y Tablas

Introducción Y Entorno

Creación De Bases De Datos Y Tablas: Create Database, Create Table

Operaciones Básicas

Consultas Básicas De Selección: Select Y Where

Operaciones Básicas

Inserción De Datos: Insert Into

Operaciones Básicas

Actualización De Datos: Update

Operaciones Básicas

Eliminación De Datos: Delete

Operaciones Básicas

Clasificación De Resultados Con Order By

Filtros Y Clasificación

Filtrado De Valores Únicos Con Distinct

Filtros Y Clasificación

Uso De Funciones Agregadas: Count, Sum, Avg, Max, Min

Funciones Agregadas Y Agrupaciones

Agrupación De Resultados Con Group By

Funciones Agregadas Y Agrupaciones

Filtrado De Grupos De Resultados Con Having

Funciones Agregadas Y Agrupaciones

Relaciones Entre Tablas

Joins Y Subqueries

Uso De Inner Join, Left Join, Right Join, Full Join

Joins Y Subqueries

Creación Y Uso De Subqueries

Joins Y Subqueries

Alterar La Estructura De Tablas Existentes: Alter Table

Manipulación De Tablas Y Datos

Renombrar Tablas Y Bases De Datos: Rename

Manipulación De Tablas Y Datos

Vaciar Tablas Y Bases De Datos: Drop

Manipulación De Tablas Y Datos

Creación Y Uso De Funciones

Funciones Y Procedimientos Almacenados

Creación Y Uso De Procedimientos Almacenados

Funciones Y Procedimientos Almacenados

Creación Y Manejo De Usuarios Y Roles

Seguridad Y Administración De Bases De Datos Sql

Asignación Y Gestión De Permisos

Seguridad Y Administración De Bases De Datos Sql

Copias De Seguridad Y Restauración De Bases De Datos

Seguridad Y Administración De Bases De Datos Sql

Optimización De Consultas

Sintaxis Avanzada

Uso De Índices Y Particiones

Sintaxis Avanzada

Uso De Vistas

Sintaxis Avanzada

Triggers Y Eventos

Sintaxis Avanzada

Certificados de superación de SQL

Supera todos los ejercicios de programación del curso de SQL y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  1. Comprender el propósito y uso de la cláusula HAVING en SQL para filtrar grupos de datos después de aplicar GROUP BY.
  2. Entender la diferencia entre WHERE y HAVING y cómo se aplican a filas individuales y grupos, respectivamente.
  3. Aprender a utilizar HAVING junto con WHERE para filtrar datos antes y después de aplicar la cláusula GROUP BY.