2016-07-04 6 views
-1
emp_name |salary 
    --------------- 
    A  |12568 
    B  |3000 
    C  |7852 
    D  |2568 
    E  |9852 
    F  |1598 
    G  |8569 

Ich möchte eine SQL-Abfrage holen die niedrigsten 3 AngestellteSQL-Abfrage Top 3 Gehälter

+1

Was ist Ihr SQL-Server? Einige verwendet oben, einige verwendet Grenze. –

+0

Was ist, wenn es zwei Angestellte mit demselben dritten Gehalt gibt? – jarlh

Antwort

0

Sie holen können Top-3 verwenden drei Datensatz zu erhalten, nachdem sie in absteigender oder aufsteigender Reihenfolge der Bestellung. Ich habe SQL-Server-Syntax, aber Sie können eine Idee von diesem Ziel für DBMS haben.

Für Top drei max Gehälter

Select top 3 emp_name, salary 
order by salary desc 

Für Top drei Mindestlöhne

Select top 3 emp_name, salary 
order by salary asc 
0

ORACLE:

SELECT emp_name 
    FROM ( SELECT * 
      FROM employees e 
     ORDER BY e.salary ASC) 
WHERE ROWNUM < 4 

Viel Glück!

0

USE ASC UND LIMIT

Select emp_name, salary FROM TABLE_NAME 
order by salary ASC LIMIT 3; 
0

Sie nicht Ihre DBMS angeben, so ist dies ANSI SQL:

select emp_name, salary 
from (
    select emp_name, salary, 
     dense_rank() over (order by salary) as rnk 
    from employees 
) t 
where rnk <= 3; 

Dies wird auch mit den Mitarbeitern beschäftigen, die das gleiche Gehalt haben. Das Ergebnis kann also mehr als drei Zeilen sein, wenn mehr als einer der Mitarbeiter mit dem niedrigsten Gehalt das gleiche Gehalt hat.

+0

Interessant .. alle Super-Reputation-Benutzer und professionelle Programmierer im Datenbankbereich haben ähnliche Avatare :-) http://stackoverflow.com/users/1144035/gordon-linoff –

1

Wenn Sie Oracle 12c oder höher verwenden, können Sie Ihre Abfrage mit fetch einfacher gestalten. Anstatt solche inneren Anfragen zu schreiben.

SELECT * 
FROM 
    (SELECT * FROM EMPLOYEES EMP ORDER BY EMP.SALARY ASC 
) 
WHERE ROWNNUM <= 3 

Sie können sie in einer einzigen Abfrage kombinieren.

SELECT * FROM employees emp ORDER BY emp.salary ASC 
FETCH FIRST 3 ROWS ONLY; 

Weitere Informationen zu Syntax und Konstrukt finden Sie hier. http://www.dba-oracle.com/t_offset_fet_first_rows_only.htm

+1

Die zweite ist auch die ANSI SQL-Antwort! – jarlh

+0

Ja, aber die Oracle-Version sollte immer noch 12c oder höher sein, oder? – thebenman

+0

Ich kenne die Details nicht, wollte nur auf die ANSI SQL-Antwort hinweisen. (Neuere Oracle Versionen sind so detailliert wie ich weiß ...) – jarlh