Mysql
 sql >> Database >  >> RDS >> Mysql

Query MySQL su righe di ranking dinamiche

avere
Sarà lento, ma un having la clausola verrà eseguita dopo tutti i select, join, where e group by sono terminati e sono stati completamente risolti.
L'unico problema è che having non usa un indice, mentre where usa un indice.

SELECT
  ranking stuff
FROM 
  lot of tables
WHERE simple_condition
HAVING filters_that_run_last

Rendi espliciti i tuoi join
Tieni presente che non devi mescolare join espliciti e impliciti.
Se vuoi un cross join, puoi usare il cross join parola chiave.

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