sql >> Databáze >  >> RDS >> Mysql

MYSQL dotaz k nalezení všech zaměstnanců s n-tým nejvyšším platem

Ptali jste se, jak se zdá jako rozumná otázka. Existují různé způsoby, jak dělat věci v SQL a někdy jsou některé metody lepší než jiné. Problém hodnocení je jen jedním z mnoha a mnoha příkladů. "Odpověď" na vaši otázku je, že obecně order by bude fungovat lépe než group by v MySQL. I když i to závisí na konkrétních datech a na tom, co považujete za "lepší".

Konkrétní problémy s otázkou jsou, že máte tři různé dotazy, které vracejí tři různé věci.

První vrátí všechny zaměstnance se „hustým pořadím“, které je stejné. Tato terminologie je použita záměrně, protože odpovídá ANSI dense_rank() funkce, kterou MySQL nepodporuje. Pokud jsou tedy vaše platy 100, 100 a 10, vrátí dva řádky s hodnocením 1 a jeden s hodnocením 2.

Druhý vrátí jiné výsledky, pokud existují remízy. Pokud jsou platy 100, 100, 10, tato verze nevrátí žádné řádky s hodnocením 1, dva řádky s hodnocením 2 a jeden řádek s hodnocením 3.

Třetí vrátí úplně jinou sadu výsledků, což jsou pouze platy a pořadí platů.

Můj komentář směřoval k vyzkoušení dotazů na vaše data. Ve skutečnosti byste se měli rozhodnout, co vlastně chcete, a to jak z funkčního, tak z hlediska výkonu.



  1. Wordpress kombinovat dotazy

  2. Nelze se připojit k databázovému serveru (pracovní plocha mysql)

  3. Přesměrování – alternativa k <meta http-equiv='refresh' />?

  4. rychlý výběr náhodného řádku z velké tabulky v mysql