none
SELECT de los 5 mayores y 5 menores de una tabla RRS feed

  • Pregunta

  • Buenas noches, aca vengo de nuevo a solicitar de su ayuda, tengo un proyecto que es algo parecido a un dashboard que muestra graficas alimentadas por archivos excels. El detalle es que algunos excels son exageradamente grandes (8500++ registros) y el profesor me pidio que en vez de graficar todos esos datos, que de la tabla solo escogiera los 5 valores mayores y los 5 menores.

    SELECT COUNT(asignatura) as cantidad ,asignatura 
    	FROM archivo
    	WHERE (DATEDIFF(MINUTE, fecha_retiro, fecha_devolucion )>45) AND id_archivo=2
    	GROUP BY  asignatura
    	ORDER BY cantidad

    esa es la query de la consulta que me arroja estos valores:

    En este caso son 90 registros, de esos 90 deseo obtener los 5 mas altos y los 5 mas bajos

    Desde ya muchisimas gracias...


    • Editado erick1987v domingo, 12 de mayo de 2019 3:12
    domingo, 12 de mayo de 2019 2:03

Respuestas

  • Hola erick1987v:

    Eso lo puedes acometer de muchas maneras, por ejemplo usando

    TOP

    https://docs.microsoft.com/es-es/sql/t-sql/queries/top-transact-sql?view=sql-server-2017

    WITH CTE
    	AS (
    	/* envuelvo tu query en una tabla de expresión común */
    	SELECT COUNT(asignatura) as cantidad ,asignatura 
    	FROM dbo.archivo
    	WHERE (DATEDIFF(MINUTE, fecha_retiro, fecha_devolucion )>45) AND id_archivo=2
    	GROUP BY  asignatura),
    	SUPERIOR
    	AS (
    	/* En el correlativo obtengo los cinco superiores*/
    	SELECT TOP (5) CANTIDAD
    				  , ASIGNATURA
    	    FROM           
    		    CTE
    	    ORDER BY CANTIDAD),
    	INFERIOR
    	AS (
    	/* En el correlativo obtengo los cinco superiores*/
    	SELECT TOP (5) CANTIDAD
    				  , ASIGNATURA
    	    FROM           
    		    CTE
    	    ORDER BY CANTIDAD DESC
    	)
    	/* ULIZO UNION ALL PARA JUNTAR AMBOS CONJUNTOS */
    	SELECT CANTIDAD, ASIGNATURA
    	FROM     
    		SUPERIOR
    	UNION ALL
    	SELECT CANTIDAD, ASIGNATURA
    	FROM   
    		INFERIOR ORDER BY ASIGNATURA;

    Tablas de expresión común correlativas

    https://javifer2.blogspot.com/search/label/tablas%20de%20expresión%20común%20%282%29%20Correlativos

    Uno de los problemas que tiene esta construcción, es que no responde a la pregunta de ¿Y que pasa con los empates, cuando cantidad por ejemplo tiene 7 asignaturas empatadas.

    Para esto tienes dos vías principales, a mi modo de ver.

    Una resolver los empates en la misma consulta, Select top(5) WITH TIES CANTIDAD...…

    De manera que te devuelva los 5 o los que correspondan que estén en esa situación, 6 o 7 o....

    Existen muchas maneras, esta es una, si prefieres otra, o no lo ves claro, no dudes en comentarlo


    • Marcado como respuesta erick1987v domingo, 12 de mayo de 2019 15:30
    domingo, 12 de mayo de 2019 5:38
  • Deleted
    • Marcado como respuesta erick1987v domingo, 12 de mayo de 2019 15:30
    domingo, 12 de mayo de 2019 11:15

Todas las respuestas

  • Hola erick1987v:

    Eso lo puedes acometer de muchas maneras, por ejemplo usando

    TOP

    https://docs.microsoft.com/es-es/sql/t-sql/queries/top-transact-sql?view=sql-server-2017

    WITH CTE
    	AS (
    	/* envuelvo tu query en una tabla de expresión común */
    	SELECT COUNT(asignatura) as cantidad ,asignatura 
    	FROM dbo.archivo
    	WHERE (DATEDIFF(MINUTE, fecha_retiro, fecha_devolucion )>45) AND id_archivo=2
    	GROUP BY  asignatura),
    	SUPERIOR
    	AS (
    	/* En el correlativo obtengo los cinco superiores*/
    	SELECT TOP (5) CANTIDAD
    				  , ASIGNATURA
    	    FROM           
    		    CTE
    	    ORDER BY CANTIDAD),
    	INFERIOR
    	AS (
    	/* En el correlativo obtengo los cinco superiores*/
    	SELECT TOP (5) CANTIDAD
    				  , ASIGNATURA
    	    FROM           
    		    CTE
    	    ORDER BY CANTIDAD DESC
    	)
    	/* ULIZO UNION ALL PARA JUNTAR AMBOS CONJUNTOS */
    	SELECT CANTIDAD, ASIGNATURA
    	FROM     
    		SUPERIOR
    	UNION ALL
    	SELECT CANTIDAD, ASIGNATURA
    	FROM   
    		INFERIOR ORDER BY ASIGNATURA;

    Tablas de expresión común correlativas

    https://javifer2.blogspot.com/search/label/tablas%20de%20expresión%20común%20%282%29%20Correlativos

    Uno de los problemas que tiene esta construcción, es que no responde a la pregunta de ¿Y que pasa con los empates, cuando cantidad por ejemplo tiene 7 asignaturas empatadas.

    Para esto tienes dos vías principales, a mi modo de ver.

    Una resolver los empates en la misma consulta, Select top(5) WITH TIES CANTIDAD...…

    De manera que te devuelva los 5 o los que correspondan que estén en esa situación, 6 o 7 o....

    Existen muchas maneras, esta es una, si prefieres otra, o no lo ves claro, no dudes en comentarlo


    • Marcado como respuesta erick1987v domingo, 12 de mayo de 2019 15:30
    domingo, 12 de mayo de 2019 5:38
  • Deleted
    • Marcado como respuesta erick1987v domingo, 12 de mayo de 2019 15:30
    domingo, 12 de mayo de 2019 11:15
  • Buenos dias, muchisimas gracias por su orientacion y explicación,  he tomado ambos consejos, lei el articulo  de predicados sargable, muy interesante, buscare mas informacion. Gracias Sr. Javier y Sr Jose excelente ayuda ambos. Si tengo otra duda por aqui estare molestando jeje


    domingo, 12 de mayo de 2019 16:40