¿Qué hace la cláusula HAVING en una consulta?
La cláusula HAVING es como WHERE pero opera sobre registros agrupados devueltos por un GROUP BY.
HAVING se aplica a los registros de grupo resumidos, mientras que WHERE se aplica a los registros individuales.
Sólo se devolverán los grupos que cumplan los criterios de HAVING.
HAVING requiere que esté presente una cláusula GROUP BY.
Tanto WHERE como HAVING pueden utilizarse en la misma consulta al mismo tiempo.
La sintaxis HAVING de SQL
La sintaxis general es
SELECT column-names FROM table-name WHERE condition GROUP BY column-namesHAVING condition
La sintaxis general con ORDER BY es:
SELECT column-names FROM table-name WHERE condition GROUP BY column-namesHAVING condition ORDER BY column-names
Id
Nombre
Apellido
Ciudad
País
Teléfono
SQL GROUP BY Ejemplos
Problema: Listar el número de clientes de cada país.
Incluir sólo los países con más de 10 clientes.
Incluir sólo los países con más de 10 clientes.
SELECT COUNT(Id), Country FROM Customer GROUP BY CountryHAVING COUNT(Id) > 10
Resultado: 3 registros
Cuento | País |
---|---|
11 | Francia | 11 | Alemania | 13 | EEUU |
Id
Nombre
Apellido
Ciudad
Teléfono
Problema: Enumerar el número de clientes de cada país,
excepto Estados Unidos, ordenados de mayor a menor.
Incluya sólo los países con 9 o más clientes.
excepto Estados Unidos, ordenados de mayor a menor.
Incluya sólo los países con 9 o más clientes.
SELECT COUNT(Id), Country FROM Customer WHERE Country 'USA' GROUP BY CountryHAVING COUNT(Id) >= 9 ORDER BY COUNT(Id) DESC
Resultado: 3 registros
Cuento | País | 11 | Francia |
---|---|
11 | Alemania |
9 | Brasil |
Id
Fecha de pedido
Número de pedido
Id de cliente
Importe total
Id
Nombre
Apellido
Ciudad
País
Teléfono
Problema: Listar todos los clientes con pedidos promedio
entre 1000 y 1200 dólares.
entre 1000 y 1200 dólares.
SELECT AVG(TotalAmount), FirstName, LastName FROM O JOIN Customer C ON O.CustomerId = C.Id GROUP BY FirstName, LastNameHAVING AVG(TotalAmount) BETWEEN 1000 AND 1200
Resultado: 10 registros
Promedio | Nombre | Apellido |
---|---|---|
1081.215000 | Miguel | Ángel Paolino | 1063.420000 | Isabel | de Castro | 1008.440000 | Alexander | Feuer | 1062.038461 | Thomas | Hardy | 1107.806666 | Pirkko | Koskitalo | 1174.945454 | Janete | Limeira | 1073.621428 | Antonio | Moreno | 1065.385000 | Rita | Müller | 1183.010000 | José | Pedro Freyre | 1057.386666 | Carine | Schmitt |