English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de PostgreSQL

Tutoriales avanzados de PostgreSQL

Interfaz PostgreSQL

Cláusula HAVING de PostgreSQL

La cláusula HAVING nos permite filtrar los datos de los grupos después de la agrupación.

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

Gramática

A continuación, se muestra la ubicación de la cláusula HAVING en la consulta SELECT:

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

La cláusula HAVING debe colocarse después de la cláusula GROUP BY y antes de la cláusula ORDER BY. A continuación, se muestra la gramática básica de la cláusula HAVING en la consulta SELECT:

SELECT columna1, columna2
FROM tabla1, tabla2
WHERE [condiciones]
GROUP BY columna1, columna2
HAVING [ condiciones ]
ORDER BY columna1, columna2

Ejemplo en línea

Crear la tabla COMPANY (Descargar archivo SQL de COMPANY ),los datos son los siguientes:

w3codeboxdb# select * from COMPANY;
 id | name                          | age | address                          | salary
----+-------+-----+-----------+--------
  1 | Paul                           |  32 | California                      |  20000
  2 | Allen                           |  25 | Texas                          |  15000
  3 | Teddy                           |  23 | Norway                          |  20000
  4 | Mark                           |  25 | Rich-Mond                          |  65000
  5 | David                           |  27 | Texas                          |  85000
  6 | Kim                            |  22 | South-Hall|  45000
  7 | James                          |  24 | Houston                        |  10000
(7 rows)

El siguiente ejemplo encontrará registros agrupados por el valor del campo NAME y que tienen name(名称) La cuenta del campo es menor que 2 Datos:

SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) < 2;

Se obtuvieron los siguientes resultados:

  name
 -------
  Teddy
  Paul
  Mark
  David
  Allen
  Kim
  James
(7 rows)

Añadiremos algunos datos a la tabla:

INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00);
INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00);
INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00);

En este momento, los registros de la tabla COMPANY son los siguientes:

 id | name                          | age | address                          | salary
 ----+-------+-----+--------------+--------
   1 | Paul                           |  32 | California                      |  20000
   2 | Allen                           |  25 | Texas                          |  15000
   3 | Teddy                           |  23 | Norway                          |  20000
   4 | Mark                           |  25 | Rich-Mond                           |  65000
   5 | David                           |  27 | Texas                          |  85000
   6 | Kim                            |  22 | South-Hall                           |  45000
   7 | James                          |  24 | Houston                        |  10000
   8 | Paul                           |  24 | Houston                        |  20000
   9 | James                          |  44 | Norway                          |   5000
  10 | James                          |  45 | Texas                          |   5000
(10 rows)

El siguiente ejemplo encontrará registros agrupados por el valor del campo name y que tienen una cuenta de nombres mayor que 1 Datos:

w3codeboxdb-# SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) > 1;

Se obtuvieron los siguientes resultados:

 name
-------
 Paul
 James
(2 rows)