Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Abfrage für dynamische Ranking-Zeilen

haben
Es wird langsam, aber ein having -Klausel wird nach ausgeführt Alle Selects, Joins, Where und Group By sind beendet und vollständig aufgelöst.
Das einzige Problem ist, dass having verwendet keinen Index, während where verwendet einen Index.

SELECT
  ranking stuff
FROM 
  lot of tables
WHERE simple_condition
HAVING filters_that_run_last

Machen Sie Ihre Joins explizit
Beachten Sie, dass Sie explizite und implizite Joins nicht mischen müssen.
Wenn Sie wollen B. ein Cross-Join, können Sie den cross join verwenden Stichwort.

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