stringtranslate.com

Tener (SQL)

Una HAVINGcláusula en SQL especifica que una SELECTdeclaración SQL solo debe devolver filas donde los valores agregados cumplan con las condiciones especificadas . [1] : 125–127 

Usar

HAVINGy WHERElos principiantes suelen confundirlos, pero tienen propósitos diferentes. WHEREse tiene en cuenta en una etapa anterior de la ejecución de una consulta, filtrando las filas leídas de las tablas. Si una consulta contiene GROUP BY, las filas de las tablas se agrupan y agregan. Después de la operación de agregación, HAVINGse aplica , filtrando las filas que no coinciden con las condiciones especificadas. Por lo tanto, WHEREse aplica a los datos leídos de las tablas y HAVINGsolo debe aplicarse a los datos agregados, que no se conocen en la etapa inicial de una consulta.

Para visualizar la condición presente formada por la GROUP BYcláusula, HAVINGse utiliza la cláusula. [ aclaración necesaria ]

Ejemplos

Para devolver una lista de identificaciones de departamentos cuyas ventas totales excedieron $1000 en la fecha del 1 de enero de 2000, junto con la suma de sus ventas en esa fecha:

SELECCIONAR DeptID , SUMA ( MontoDeVenta ) DE Ventas DONDE FechaDeVenta = '2000-01-01' AGRUPAR POR DeptID QUE TIENE SUMA ( MontoDeVenta ) > 1000           

Haciendo referencia a las tablas de muestra en el ejemplo de unión , la siguiente consulta devolverá la lista de departamentos que tienen más de 1 empleado:

SELECCIONAR NombreDepartamento , CONTAR ( * ) DE Empleado UNIR Departamento EN Empleado.IDDepartamento = Departamento.IDDepartamento AGRUPAR POR NombreDepartamento QUE TIENE CONTAR ( * ) > 1 ;               

HAVINGes conveniente, pero no necesario. El código equivalente al ejemplo anterior, pero sin usar HAVING, podría verse así:

SELECCIONAR * DE ( SELECCIONAR NombreDepartamento COMO deptNam , CONTAR ( * ) COMO empCount DE Empleado COMO emp UNIR Departamento COMO dept EN emp . IDDepartamento = dept . IDDepartamento AGRUPAR POR deptNam ) COMO grp DONDE grp . empCount > 1 ;                              

Referencias

  1. ^ Documentación de PostgreSQL 16.1 (PDF) . The PostgreSQL Global Development Group. 2023 . Consultado el 8 de febrero de 2024 .

Enlaces externos