Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête MYSQL pour trouver tous les employés avec le nième salaire le plus élevé

Vous avez demandé à quoi semble comme une question raisonnable. Il existe différentes façons de faire les choses en SQL et parfois certaines méthodes sont meilleures que d'autres. Le problème de classement n'est qu'un exemple parmi tant d'autres. La "réponse" à votre question est que, en général, order by va être plus performant que group by dans MySQL. Même si cela dépend des données particulières et de ce que vous considérez comme "meilleur".

Les problèmes spécifiques avec la question sont que vous avez trois requêtes différentes qui renvoient trois choses différentes.

Le premier renvoie tous les employés avec un "rang dense" qui est le même. Cette terminologie est utilisée à dessein car elle correspond à l'ANSI dense_rank() fonction que MySQL ne prend pas en charge. Ainsi, si vos salaires sont 100, 100 et 10, il renverra deux lignes avec un classement de 1 et une avec un classement de 2.

Le second renvoie des résultats différents en cas d'égalité. Si les salaires sont 100, 100, 10, cette version ne renverra aucune ligne avec un classement de 1, deux lignes avec un classement de 2 et une ligne avec un classement de 3.

Le troisième renvoie un ensemble de résultats entièrement différent, qui ne contient que les salaires et le classement des salaires.

Mon commentaire visait à essayer les requêtes sur vos données. En fait, vous devez décider ce que vous voulez réellement, à la fois d'un point de vue fonctionnel et d'un point de vue des performances.