Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie MYSQL, aby znaleźć wszystkich pracowników z n-tą najwyższą pensją

Pytałeś, co wydaje się jak rozsądne pytanie. Istnieją różne sposoby działania w SQL i czasami niektóre metody są lepsze od innych. Problem rankingu to tylko jeden z wielu przykładów. „Odpowiedź” na Twoje pytanie jest taka, że ​​ogólnie order by będzie działać lepiej niż group by w MySQL. Chociaż nawet to zależy od konkretnych danych i tego, co uważasz za „lepsze”.

Specyficzne problemy z pytaniem polegają na tym, że masz trzy różne zapytania, które zwracają trzy różne rzeczy.

Pierwsza zwraca wszystkich pracowników z „gęstą rangą”, która jest taka sama. Ta terminologia jest używana celowo, ponieważ odpowiada ANSI dense_rank() funkcja, której MySQL nie obsługuje. Tak więc, jeśli twoje zarobki wynoszą 100, 100 i 10, zwróci dwa wiersze z rankingiem 1 i jeden z rankingiem 2.

Drugi zwraca inne wyniki, jeśli są remisy. Jeśli pensje wynoszą 100, 100, 10, ta wersja nie zwróci żadnych wierszy z rankingiem 1, dwa wiersze z rankingiem 2 i jeden wiersz z rankingiem 3.

Trzecia zwraca zupełnie inny zestaw wyników, czyli tylko pensje i ranking wynagrodzeń.

Mój komentarz był skierowany na wypróbowanie zapytań na twoich danych. W rzeczywistości powinieneś zdecydować, czego naprawdę chcesz, zarówno z perspektywy funkcjonalnej, jak i wydajnościowej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Format czasu PHP

  2. Zdalne połączenie z bazą danych heroku clearDB

  3. Próbuję wyświetlić dane z 2 tabel

  4. Łączenie się z MySQL z innych maszyn

  5. Zapytanie SQL z limitem wierszy z jednej tabeli, a nie zbioru wyników