SQL - Cláusula de tener

los HAVING Clause le permite especificar condiciones que filtran qué resultados de grupo aparecen en los resultados.

La cláusula WHERE coloca condiciones en las columnas seleccionadas, mientras que la cláusula HAVING coloca condiciones en los grupos creados por la cláusula GROUP BY.

Sintaxis

El siguiente bloque de código muestra la posición de la cláusula HAVING en una consulta.

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

La cláusula HAVING debe seguir a la cláusula GROUP BY en una consulta y también debe preceder a la cláusula ORDER BY si se utiliza. El siguiente bloque de código tiene la sintaxis de la instrucción SELECT, incluida la cláusula HAVING:

SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2

Ejemplo

Considere que la tabla CLIENTES tiene los siguientes registros.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A continuación se muestra un ejemplo, que mostraría un registro para un recuento de edad similar que sería mayor o igual a 2.

SQL > SELECT ID, NAME, AGE, ADDRESS, SALARY
FROM CUSTOMERS
GROUP BY age
HAVING COUNT(age) >= 2;

Esto produciría el siguiente resultado:

+----+--------+-----+---------+---------+
| ID | NAME   | AGE | ADDRESS | SALARY  |
+----+--------+-----+---------+---------+
|  2 | Khilan |  25 | Delhi   | 1500.00 |
+----+--------+-----+---------+---------+