none
Orden de ejecución select RRS feed

  • Pregunta

  • Buenos días,

    Al realizar una consulta note que dependiendo del order by que aplique pareciera que primero realiza el group by y posteriormente realiza el filtro, por un error que aparece en la consulta, pero no tiene que ver con los registros que se estan procesando.

    ¿Es posible que se de esto?, ¿Que puedo hacer para que ejecute primero el where antes del group by?

    lunes, 10 de julio de 2017 13:49

Respuestas

  • En la secuencia logica del query primero se ejecuta el WHERE y luego el GROUP BY, aunque en realidad el optimizador puede evaluar ciertas expresiones antes o despues en esa secuencia.

    La secuencia logica es:

    - FROM (JOIN / APPLY / PIVOT / UNPIVOT)

    - WHERE

    - GROUP BY

    - HAVING

    - SELECT (expresiones, alias, etc.)

    - DISTINCT

    - TOP

    - ORDER BY

    Como vez la clausula ORDER BY suele ser la ultima, aunque esta juega dos papeles. El uno cuando se usa con la clausula TOP y la otra para ordenamiento de la salida.

    Para contestar tu pregunta seria de ayuda ver el codigo y el plan de ejecucion (al menos el archivo xml).


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    • Editado HunchbackMVP lunes, 10 de julio de 2017 14:55
    • Propuesto como respuesta Joyce_ACModerator lunes, 10 de julio de 2017 17:15
    • Marcado como respuesta Moderador M martes, 25 de julio de 2017 15:30
    lunes, 10 de julio de 2017 14:24
  • ¿Qué puedo hacer para que ejecute primero el Where antes del Group By? 

    El orden que mencionas corresponde al orden lógico en que se procesa una consulta de selección:

    FROM
    ON
    JOIN
    WHERE
    GROUP BY
    HAVING
    SELECT
    ORDER BY

    Nota que previo a agrupar se filtra las filas -del conjunto de resultados- según las condiciones que se definan en la cláusula WHERE.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Moderador M martes, 25 de julio de 2017 15:30
    lunes, 10 de julio de 2017 14:26

Todas las respuestas

  • Te aconsejo subir tu codigo , tu error y que es lo deseas  obtener . 

    Puedes utilizar una tabla temporal para hacer el WHERE  y luego usas la tabla temporal y le da el GROUP BY y el ORDER BY

    lunes, 10 de julio de 2017 14:02
  • En la secuencia logica del query primero se ejecuta el WHERE y luego el GROUP BY, aunque en realidad el optimizador puede evaluar ciertas expresiones antes o despues en esa secuencia.

    La secuencia logica es:

    - FROM (JOIN / APPLY / PIVOT / UNPIVOT)

    - WHERE

    - GROUP BY

    - HAVING

    - SELECT (expresiones, alias, etc.)

    - DISTINCT

    - TOP

    - ORDER BY

    Como vez la clausula ORDER BY suele ser la ultima, aunque esta juega dos papeles. El uno cuando se usa con la clausula TOP y la otra para ordenamiento de la salida.

    Para contestar tu pregunta seria de ayuda ver el codigo y el plan de ejecucion (al menos el archivo xml).


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    • Editado HunchbackMVP lunes, 10 de julio de 2017 14:55
    • Propuesto como respuesta Joyce_ACModerator lunes, 10 de julio de 2017 17:15
    • Marcado como respuesta Moderador M martes, 25 de julio de 2017 15:30
    lunes, 10 de julio de 2017 14:24
  • ¿Qué puedo hacer para que ejecute primero el Where antes del Group By? 

    El orden que mencionas corresponde al orden lógico en que se procesa una consulta de selección:

    FROM
    ON
    JOIN
    WHERE
    GROUP BY
    HAVING
    SELECT
    ORDER BY

    Nota que previo a agrupar se filtra las filas -del conjunto de resultados- según las condiciones que se definan en la cláusula WHERE.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Moderador M martes, 25 de julio de 2017 15:30
    lunes, 10 de julio de 2017 14:26