Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta MYSQL para encontrar todos os funcionários com o enésimo salário mais alto


Você perguntou o que parece como uma pergunta razoável. Existem diferentes maneiras de fazer as coisas no SQL e às vezes alguns métodos são melhores que outros. O problema de classificação é apenas um dos muitos, muitos exemplos. A "resposta" para sua pergunta é que, em geral, order by vai ter um desempenho melhor do que group by em MySQL. Embora até isso dependa dos dados específicos e do que você considera "melhor".

Os problemas específicos com a pergunta são que você tem três consultas diferentes que retornam três coisas diferentes.

O primeiro retorna todos os funcionários com um "rank denso" que é o mesmo. Essa terminologia é usada propositalmente porque corresponde ao ANSI dense_rank() função que o MySQL não suporta. Portanto, se seus salários forem 100, 100 e 10, ele retornará duas linhas com classificação 1 e uma com classificação 2.

O segundo retorna resultados diferentes se houver empates. Se os salários forem 100, 100, 10, esta versão não retornará nenhuma linha com classificação 1, duas linhas com classificação 2 e uma linha com classificação 3.

O terceiro retorna um conjunto de resultados totalmente diferente, que é apenas os salários e a classificação dos salários.

Meu comentário foi direcionado para tentar as consultas em seus dados. Na verdade, você deve decidir o que realmente quer, tanto do ponto de vista funcional quanto do desempenho.