sql >> Database >  >> RDS >> Mysql

MYSQL-query om alle werknemers met het op één na hoogste salaris te vinden

Je hebt gevraagd wat lijkt als een redelijke vraag. Er zijn verschillende manieren om dingen in SQL te doen en soms zijn sommige methoden beter dan andere. Het rangschikkingsprobleem is slechts een van de vele, vele voorbeelden. Het "antwoord" op uw vraag is dat, in het algemeen, order by gaat beter presteren dan group by in MySQL. Hoewel zelfs dat afhangt van de specifieke gegevens en wat u als "beter" beschouwt.

De specifieke problemen met de vraag zijn dat je drie verschillende zoekopdrachten hebt die drie verschillende dingen opleveren.

De eerste retourneert alle werknemers met een "dichte rang" die hetzelfde is. Die terminologie is met opzet gebruikt omdat het overeenkomt met de ANSI dense_rank() functie die MySQL niet ondersteunt. Dus als uw salarissen 100, 100 en 10 zijn, retourneert het twee rijen met een rangorde van 1 en één met een rangorde van 2.

De tweede retourneert verschillende resultaten als er banden zijn. Als de salarissen 100, 100, 10 zijn, retourneert deze versie geen rijen met een rangorde van 1, twee rijen met een rangorde van 2 en één rij met een rangorde van 3.

De derde retourneert een geheel andere resultatenset, die alleen de salarissen en de rangorde van de salarissen zijn.

Mijn opmerking was gericht op het proberen van de query's op uw gegevens. In feite moet je beslissen wat je echt wilt, zowel vanuit functioneel als prestatieperspectief.



  1. @@DATEFIRST – Ontvang de eerste dag van de week in SQL Server

  2. Hoe retourneer ik gehele en numerieke kolommen uit MySQL als gehele getallen en cijfers in PHP?

  3. Hoe AI de ontwikkeling en het testen van software zal veranderen

  4. MySQL Selecteer waar in veel tot veel