sql >> Databasteknik >  >> RDS >> Mysql

MYSQL-fråga för att hitta alla anställda med n:e högsta lön

Du har frågat vad verkar som en rimlig fråga. Det finns olika sätt att göra saker i SQL och ibland är vissa metoder bättre än andra. Rankingproblemet är bara ett av många, många exempel. "Svaret" på din fråga är att i allmänhet order by kommer att prestera bättre än group by i MySQL. Även om även det beror på den specifika informationen och vad du anser vara "bättre".

De specifika problemen med frågan är att du har tre olika frågor som returnerar tre olika saker.

Den första returnerar alla anställda med en "tät rang" som är densamma. Den terminologin används avsiktligt eftersom den motsvarar ANSI dense_rank() funktion som MySQL inte stöder. Så om dina löner är 100, 100 och 10, kommer det att returnera två rader med en rankning på 1 och en med en ranking på 2.

Den andra ger olika resultat om det finns band. Om lönerna är 100, 100, 10 kommer den här versionen inte att returnera några rader med en rankning på 1, två rader med en ranking på 2 och en rad med en ranking på 3.

Den tredje ger en helt annan resultatuppsättning, som bara är lönerna och rangordningen av lönerna.

Min kommentar var inriktad på att pröva frågorna om din data. Faktum är att du bör bestämma vad du faktiskt vill ha, både ur ett funktionellt och ett prestationsperspektiv.



  1. Anslut till fjärransluten PostgreSql-databas med Powershell

  2. Django MySQL grupp efter dag med tidszon

  3. Hur skapar man en pdf-fil med mysql-data?

  4. Laravel/ PHP:Ordna efter alfabetisk ordning med nummer i ordning