Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Duda] DUDA SOBRE SUBCONSULTAS

Estimados, Tengo una duda con la solucion sugerida para la actvidad 11 "Relación entre HAVING y Subconsulta" en la clase 4 "Uniendo tablas y consultas" del curso de Consultas en SQL:

Esta es la consulta original que se solicita reformular con subconsulta:

``
SELECT DNI, COUNT(*) FROM facturas
WHERE YEAR(FECHA_VENTA) = 2016
GROUP BY DNI
HAVING COUNT(*) > 2000;

Y esta es la solucion equivalente sugerida:

SELECT X.DNI, X.CANTIDAD_FACTURAS FROM 
(SELECT DNI, COUNT(*) AS CANTIDAD_FACTURAS FROM facturas
WHERE YEAR(FECHA_VENTA) = 2016
GROUP BY DNI) X
WHERE CANTIDAD_FACTURAS > 2000;

Ahora bien, a mi me ha funcionado bien también esta otra:

SELECT X.DNI, X.CANTIDAD_FACTURAS FROM 
(SELECT DNI, COUNT(*) AS CANTIDAD_FACTURAS FROM facturas
WHERE YEAR(FECHA_VENTA) = 2016
GROUP BY DNI) X
HAVING CANTIDAD_FACTURAS > 2000;

Es decir utilizando HAVING. La pregunta es ¿es correcto usar HAVIN?¿es mas adecuado utilizar WHERE? y, en ese caso ¿por qué?

Gracias!!

1 respuesta

¡Hola Estudiante!

Es una muy buena pregunta. En cuanto a la consulta que planteas, ambas opciones son correctas y equivalentes en cuanto a su resultado. La diferencia radica en la forma en que se filtran los resultados.

La cláusula WHERE se utiliza para filtrar los registros antes de que se realice la agrupación, mientras que la cláusula HAVING se utiliza para filtrar los resultados después de que se realiza la agrupación.

En el caso de la consulta original, se utiliza la cláusula HAVING para filtrar los resultados después de la agrupación, mientras que en la solución que propones, se utiliza la cláusula WHERE para filtrar los registros antes de la agrupación.

En resumen, ambas opciones son correctas, pero la elección entre ellas dependerá del resultado que se desee obtener y del criterio del programador.

¡Espero haber ayudado y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios! :)