Hvordan komme nest høyeste lønn ansatte i en tabell – Stack Overflow

Det er et spørsmål jeg fikk i ettermiddag:

Det en tabell inneholder ID, Navn og Lønn for ansatte, få navnene på de nest høyeste lønn ansatte, i SQL Server

Her er mitt svar, jeg bare skrev det inn i papir og ikke sikker på at det er helt gyldig, men det ser ut til å fungere:

Jeg synes det er stygt, men det er den eneste løsningen kommer til meg.

Kan du foreslå meg en bedre spørring?

Tusen takk.

En annen intuitiv måte er: – Anta at vi ønsker å finne Nth høyeste lønnen deretter

1) Sorter Medarbeider som per synkende rekkefølge av lønn

2) Ta første N poster med ROWNUM. Så i dette trinnet Nth posten her er Nth høyeste lønnen

3) Nå sortere midlertidig resultat i stigende rekkefølge. Dermed Nth høyeste lønnen er nå første posten

4) Få første posten fra denne midlertidige resultat.

Det vil være Nth høyeste lønnen.

I tilfelle det er å gjenta lønn deretter i innerste spørring tydelig kan anvendes.

svarte 1 februar ’13 på 06:01

Dette kan hjelpe deg

vi kan finne noen n’te høyeste lønnen ved å sette ‘n’ (n gt; 0) i stedet for ‘2’

svarte 13 februar ’13 på 05:54

Jeg tror du ønsker å bruke DENSE_RANK som du ikke vet hvor mange ansatte ha samme lønn, og du sa du ønsket navn på ansatte.

ROW_NUMBER vil gi deg unik nummerering selv om lønningene bundet, og vanlig RANK ville ikke gi deg en «2» som en rank hvis du hadde flere folk binde for høyest lønn. Jeg har rettet opp dette som DENSE_RANK gjør den beste jobben for dette.

svarte 14 september ’11 på 13:56

Enkel måte uten å bruke noen spesiell funksjon spesifikke for Oracle, MySQL etc.

Anta ANSATTE tabellen har data som nedenfor. Lønn kan gjentas.

Samme resultat kan oppnås ved spørring

Først finner vi ut forskjellige lønninger. Så finner vi ut telling av forskjellige lønn større enn hver rad. Dette er ikke annet enn rang av at id. For høyest lønn, vil denne opptellingen være null. Så ‘1’ er gjort for å starte rang fra en.

Nå kan vi få IDer ved NTH rang ved å legge klausul der til over søket.

svarte 16 november ’12 på 05:22

Kilde: stackoverflow.com

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

8 − 2 =