sql >> Database teknologi >  >> RDS >> Mysql

MYSQL-forespørgsel for at finde alle medarbejdere med n. højeste løn

Du har spurgt, hvad synes som et fornuftigt spørgsmål. Der er forskellige måder at gøre tingene på i SQL, og nogle gange er nogle metoder bedre end andre. Rangeringsproblemet er blot et af mange, mange eksempler. "Svaret" på dit spørgsmål er, at generelt order by kommer til at præstere bedre end group by i MySQL. Selvom selv det afhænger af de særlige data og hvad du anser for at være "bedre".

De specifikke problemer med spørgsmålet er, at du har tre forskellige forespørgsler, der returnerer tre forskellige ting.

Den første returnerer alle medarbejdere med en "tæt rang", der er den samme. Denne terminologi bruges med vilje, fordi den svarer til ANSI dense_rank() funktion, som MySQL ikke understøtter. Så hvis dine lønninger er 100, 100 og 10, vil den returnere to rækker med en placering på 1 og en med en placering på 2.

Den anden returnerer forskellige resultater, hvis der er bånd. Hvis lønningerne er 100, 100, 10, returnerer denne version ingen rækker med en placering på 1, to rækker med en placering på 2 og en række med en placering på 3.

Den tredje returnerer et helt andet resultatsæt, som kun er lønningerne og rangeringen af ​​lønningerne.

Min kommentar var rettet mod at prøve forespørgslerne på dine data. Faktisk bør du beslutte dig for, hvad du rent faktisk ønsker, både ud fra et funktionelt og et præstationsperspektiv.



  1. Python, Konverter 9 tuple UTC-dato til MySQL datetime-format

  2. Sådan bekræfter du domæneejerskab

  3. PostgreSQL:hvordan konverteres fra Unix-epoke til dato?

  4. Sådan udføres 2 eller flere SQL-forespørgsler i PHP uden at forbinde tabeller