Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête MySQL aux lignes de classement dynamiques

avoir
Ce sera lent, mais un having la clause s'exécutera après tous les selects, joins, where et group by sont terminés et entièrement résolus.
Le seul problème est que having n'utilise pas d'index, tandis que where utilise un index.

SELECT
  ranking stuff
FROM 
  lot of tables
WHERE simple_condition
HAVING filters_that_run_last

Rendez vos jointures explicites
Notez que vous n'êtes pas obligé de mélanger les jointures explicites et implicites.
Si vous voulez une jointure croisée, vous pouvez utiliser la cross join mot-clé.

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