sql >> Base de Datos >  >> RDS >> Mysql

Consulta MySQL a filas de clasificación dinámicas

tener
Será lento, pero having la cláusula se ejecutará después todas las selecciones, uniones, dónde y agrupar por han terminado y están completamente resueltos.
El único problema es que having no utiliza un índice, mientras que where utiliza un índice.

SELECT
  ranking stuff
FROM 
  lot of tables
WHERE simple_condition
HAVING filters_that_run_last

Haga que sus uniones sean explícitas
Tenga en cuenta que no tiene que mezclar uniones explícitas e implícitas.
Si quiere una unión cruzada, puede usar la cross join palabra clave.

    ....
    ) AS Ranking
    CROSS JOIN (SELECT @curr := null, @prev := null, @rank := 0) InitVars
WHERE
  Ranking.regional_id = 1003