it-swarm.com.de

Wie finde ich das dritte oder n-te maximale Gehalt aus der Gehaltstabelle?

Wie finde ich third or nth maximales Gehalt vom Gehalt table(EmpID,EmpName,EmpSalary) auf optimierte Weise?

87
Karan Gandhi

Verwenden Sie ROW_NUMBER (wenn Sie einen einzelnen Code wünschen) oder DENSE_RANK (für alle zusammengehörigen Zeilen):

WITH CTE AS
(
    SELECT EmpID, EmpName, EmpSalary,
           RN = ROW_NUMBER() OVER (ORDER BY EmpSalary DESC)
    FROM dbo.Salary
)
SELECT EmpID, EmpName, EmpSalary
FROM CTE
WHERE RN = @NthRow
70
Rango

Zeilennummer :

SELECT Salary,EmpName
FROM
  (
   SELECT Salary,EmpName,ROW_NUMBER() OVER(ORDER BY Salary) As RowNum
   FROM EMPLOYEE
   ) As A
WHERE A.RowNum IN (2,3)

Unterabfrage:

SELECT *
FROM Employee Emp1
WHERE (N-1) = (
               SELECT COUNT(DISTINCT(Emp2.Salary))
               FROM Employee Emp2
               WHERE Emp2.Salary > Emp1.Salary
               )

Top Keyword:

SELECT TOP 1 salary
FROM (
      SELECT DISTINCT TOP n salary
      FROM employee
      ORDER BY salary DESC
      ) a
ORDER BY salary
79

Versuche dies 

SELECT TOP 1 salary FROM (
   SELECT TOP 3 salary 
   FROM employees 
   ORDER BY salary DESC) AS emp 
ORDER BY salary ASC

Für 3 können Sie jeden Wert ersetzen ...

48
Codesen

Wenn Sie optimieren möchten, verwenden Sie TOP Schlüsselwort. Die n-ten maximalen und minimalen Gehälter werden wie folgt abgefragt. Die Abfragen sehen jedoch kompliziert aus, wenn sie Aggregatfunktionsnamen verwenden.

N maximales Gehalt:

SELECT MIN(EmpSalary)
FROM Salary
WHERE EmpSalary IN(SELECT TOP N EmpSalary FROM Salary ORDER BY EmpSalary DESC) 

zum Beispiel: 3 maximales Gehalt:

SELECT MIN(EmpSalary)
FROM Salary
WHERE EmpSalary IN(SELECT TOP 3 EmpSalary FROM Salary ORDER BY EmpSalary DESC) 

N Mindestlohn:

SELECT MAX(EmpSalary)
FROM Salary
WHERE EmpSalary IN(SELECT TOP N EmpSalary FROM Salary ORDER BY EmpSalary ASC)

zum Beispiel: 3 Mindestlohn:

SELECT MAX(EmpSalary)
FROM Salary
WHERE EmpSalary IN(SELECT TOP 3 EmpSalary FROM Salary ORDER BY EmpSalary ASC)
33

Zu einfach, wenn Sie die Unterabfrage verwenden!

SELECT MIN(EmpSalary) from (
SELECT EmpSalary from Employee ORDER BY EmpSalary DESC LIMIT 3
);

Sie können hier einfach den n-ten Wert nach der LIMIT-Einschränkung ändern.

Hier in der Unterabfrage Wählen Sie EmpSalary aus Employee Order nach EmpSalary DESC Limit 3 aus. würde die Top 3 Gehälter der Angestellten zurückgeben. Aus dem Ergebnis wählen wir den Mindestgehalt mit MIN-Befehl, um das 3. TOP-Gehalt des Mitarbeiters zu erhalten.

12
devutkarsh

Ersetzen Sie N durch Ihre maximale Anzahl

SELECT *
FROM Employee Emp1
WHERE (N-1) = (
SELECT COUNT(DISTINCT(Emp2.Salary))
FROM Employee Emp2
WHERE Emp2.Salary > Emp1.Salary)

Erläuterung

Die obige Abfrage kann recht verwirrend sein, wenn Sie zuvor noch nichts Ähnliches gesehen haben. Die innere Abfrage wird als korrelierte Unterabfrage bezeichnet, da die innere Abfrage (die Unterabfrage) einen Wert aus der äußeren Abfrage (in diesem Fall die Emp1-Tabelle) verwendet ) in der WHERE-Klausel.

Und Quelle

12
Luv

Drittes oder ntes maximales Gehalt von der Gehaltsliste ohne Unterabfrage 

select salary from salary
   ORDER   BY salary DESC
   OFFSET  N-1 ROWS
   FETCH NEXT 1 ROWS ONLY

Für das 3. höchste Gehalt setzen Sie 2 anstelle von N-1

11
Darvi Sunny
SELECT Salary,EmpName
FROM
(
SELECT Salary,EmpName,DENSE_RANK() OVER(ORDER BY Salary DESC) Rno from EMPLOYEE
) tbl
WHERE Rno=3
10
Pankaj Gaikwad

Methode 1:

SELECT TOP 1 salary FROM (
SELECT TOP 3 salary 
 FROM employees 
  ORDER BY salary DESC) AS emp 
 ORDER BY salary ASC

Methode 2:

  Select EmpName,salary from
  (
    select EmpName,salary ,Row_Number() over(order by salary desc) as rowid      
     from EmpTbl)
   as a where rowid=3
5
user4391070

Befolgen Sie die folgende Abfrage, um das n-te höchste Gehalt zu erhalten. Auf diese Weise erhalten Sie den höchsten Lohn in MySQL. Wenn Sie nur das n-te niedrigste Gehalt erhalten möchten, müssen Sie DESC durch ASC in der Abfrage ersetzen. nth highest salary

5
Vijay Bhatt
SELECT EmpSalary 
FROM salary_table 
GROUP BY EmpSalary 
ORDER BY EmpSalary DESC LIMIT n-1, 1;

In 2008 können wir ROW_NUMBER () OVER (ORDER BY EmpSalary DESC) verwenden, um einen Rang ohne Bindungen zu erhalten, den wir verwenden können.

Zum Beispiel können wir auf diese Weise den 8. höchsten Wert erhalten oder @N in etwas anderes ändern oder es als Parameter in einer Funktion verwenden, wenn Sie möchten.

DECLARE @N INT = 8;
WITH rankedSalaries AS
(
SELECT
EmpID
,EmpName
,EmpSalary,
,RN = ROW_NUMBER() OVER (ORDER BY EmpSalary DESC)
FROM salary
)
SELECT
EmpID
,EmpName
,EmpSalary
FROM rankedSalaries
WHERE RN = @N;

Wie Sie vielleicht wissen, wird dies in SQL Server 2012 intuitiver mit LAG () durchgeführt.

4
declare @maxNthSal as nvarchar(20)
SELECT TOP 3 @maxNthSal=GRN_NAME FROM GRN_HDR   ORDER BY GRN_NAME DESC
print @maxNthSal
3

- höchstes Gehalt 

select * 
from (select lstName, salary, row_number() over( order by salary desc) as rn 
      from employee) tmp
where rn = 2

- (n-te -1) höchstes Gehalt

select * 
from employee e1
where 1 = (select count(distinct salary)  
           from employee e2
           where e2.Salary > e1.Salary )
3
Surya
Select TOP 1 Salary as '3rd Highest Salary' from (SELECT DISTINCT TOP 3 Salary from Employee ORDER BY Salary DESC) a ORDER BY Salary ASC;

Ich zeige das 3. höchste Gehalt

3
kiran lanke
SELECT MIN(COLUMN_NAME)
FROM   (
           SELECT DISTINCT TOP 3     COLUMN_NAME
           FROM   TABLE_NAME
           ORDER BY
                  COLUMN_NAME        DESC
       ) AS 'COLUMN_NAME'
3
Vikas Joshi

Dies ist eine der häufigsten Fragen in einem SQL-Interview. Ich werde verschiedene Abfragen aufschreiben, um den n-ten höchsten Wert einer Spalte herauszufinden.

Ich habe eine Tabelle mit dem Namen "Emloyee" erstellt, indem ich das folgende Skript ausführte.

CREATE TABLE Employee([Eid] [float] NULL,[Ename] [nvarchar](255) NULL,[Basic_Sal] [float] NULL)

Jetzt füge ich 8 Zeilen in diese Tabelle ein, indem Sie unterhalb der Einfügeanweisung ausführen.

insert into Employee values(1,'Neeraj',45000)
insert into Employee values(2,'Ankit',5000)
insert into Employee values(3,'Akshay',6000)
insert into Employee values(4,'Ramesh',7600)
insert into Employee values(5,'Vikas',4000)
insert into Employee values(7,'Neha',8500)
insert into Employee values(8,'Shivika',4500)
insert into Employee values(9,'Tarun',9500)

Nun werden wir das dritthöchste Basic_sal anhand verschiedener Abfragen aus der obigen Tabelle herausfinden. __ Ich habe die folgende Abfrage in Management Studio ausgeführt und unten ist das Ergebnis.

select * from Employee order by Basic_Sal desc

Im obigen Bild sehen wir, dass das 3. höchste Grundgehalt 8500 sein würde. Ich schreibe 3 verschiedene Arten, das Gleiche zu tun. Wenn Sie alle drei unten genannten Abfragen ausführen, erhalten Sie dasselbe Ergebnis, d. H. 8500.

Erster Weg: - Verwenden der Zeilennummernfunktion

select Ename,Basic_sal
from(
            select Ename,Basic_Sal,ROW_NUMBER() over (order by Basic_Sal desc) as rowid from Employee
      )A
where rowid=2
3

Optimierter Weg: Anstelle einer Unterabfrage verwenden Sie einfach limit.

select distinct salary from employee order by salary desc limit nth, 1;

Siehe Limit-Syntax hier http://www.mysqltutorial.org/mysql-limit.aspx

2
Kishor Vitekar

Nach Unterabfrage:

SELECT salary from
(SELECT rownum ID, EmpSalary salary from
(SELECT DISTINCT EmpSalary from salary_table order by EmpSalary DESC)
where ID = nth)
2
Sakib Ahammed

Versuchen Sie diese Abfrage

SELECT DISTINCT salary
FROM emp E WHERE
&no =(SELECT COUNT(DISTINCT salary) 
FROM emp WHERE E.salary <= salary)

Setzen Sie n = welchen Wert Sie wollen

1
Mayur Sawant
set @n = $n

SELECT a.* FROM ( select a.* , @rn = @rn+1  from EMPLOYEE order by a.EmpSalary desc ) As a  where rn = @n

Der dritthöchste Wert wird aus der Tabelle ermittelt 

SELECT * FROM tableName ORDER BY columnName DESC LIMIT 2, 1
1
jitendra rajput

Versuchen Sie diesen Code: -

SELECT *
   FROM one one1
   WHERE ( n ) = ( SELECT COUNT( one2.salary )
                   FROM one one2
                   WHERE one2.salary >= one1.salary
                 )
1
Deepak Kumar

Von MySQL getestete Lösung, nehme N = 4 an:

select min(CustomerID) from (SELECT distinct CustomerID FROM Customers order by CustomerID desc LIMIT 4) as A;

Ein anderes Beispiel:

select min(country) from (SELECT distinct country FROM Customers order by country desc limit 3);
1
Charlie

eine andere Möglichkeit, die letzten höchsten Daten basierend auf dem Datum zu finden 

SELECT A.JID,A.EntryDate,RefundDate,Comments,Refund, ActionBy FROM (
(select JID, Max(EntryDate) AS EntryDate from refundrequested GROUP BY JID) A 
Inner JOIN (SELECT JID,ENTRYDATE,refundDate,Comments,refund,ActionBy from refundrequested) B 
ON A.JID=B.JID AND A.EntryDate = B.EntryDate) 
0
Thomas

ermitteln des N-ten Maximalwerts mit den Funktionen CTE und FIRST_VALUE. - 5. Höchstgehalt

;WITH CTE_NTH_SAL AS 
    (SELECT FIRST_VALUE(ESAL) OVER(ORDER BY ESAL DESC) AS ESAL,
        1 AS ID
    FROM EMPLOYEE
    UNION ALL
    SELECT FIRST_VALUE(EMP.ESAL) OVER(ORDER BY EMP.ESAL DESC) AS ESAL,
        ID
    FROM EMPLOYEE EMP,
        (SELECT ESAL,
        ID+1 AS ID
        FROM CTE_NTH_SAL) CTE_NTH_SAL
        WHERE EMP.ESAL<CTE_NTH_SAL.ESAL
                AND CTE_NTH_SAL.ID<=5 )
    SELECT DISTINCT ESAL
FROM CTE_NTH_SAL
WHERE ID=5

für Beispiel-Ergebnismenge und mehr Möglichkeiten hier klicken

0
Mahesh

Finden Sie das n-te höchste Gehalt aus einer Tabelle. Im Folgenden finden Sie eine Möglichkeit, diese Aufgabe mithilfe der Funktion "Dense_rank ()" auszuführen.

 enter image description here

select linkorder from u_links

select max(linkorder) from u_links

select max(linkorder) from u_links where linkorder < (select max(linkorder) from u_links)

select top 1 linkorder 
       from ( select distinct top 2 linkorder from u_links order by linkorder desc) tmp 
order by linkorder asc

DENSE_RANK: 1. DENSE_RANK berechnet den Rang einer Zeile in einer geordneten Zeilengruppe und gibt den Rang als NUMBER zurück. Die Ränge sind fortlaufende ganze Zahlen, die mit 1 ..__ beginnen. Diese Funktion akzeptiert Argumente als beliebigen numerischen Datentyp und gibt NUMBER ..__ zurück. Als Analysefunktion berechnet DENSE_RANK den Rang jeder Zeile, die von einer Abfrage in Bezug auf die anderen Zeilen zurückgegeben wird, basierend auf den Werten von value_exprs in order_by_clause . In der obigen Abfrage wird der Rang basierend auf sal der Employee-Tabelle zurückgegeben. Im Falle eines Gleichstands weist es allen Reihen den gleichen Rang zu.

WITH result AS ( 
     SELECT linkorder ,DENSE_RANK() OVER ( ORDER BY linkorder DESC ) AS  DanseRank 
FROM u_links ) 
SELECT TOP 1 linkorder FROM result WHERE DanseRank = 5
0
Fezal halai

HINWEIS: Bitte ersetzen Sie OFFSET 3in Query durch eine beliebige N-te Ganzzahl 

SELECT EmpName,EmpSalary
FROM SALARY
ORDER BY EmpSalary DESC
OFFSET 3 ROWS 
FETCH NEXT 1 ROWS ONLY

Beschreibung 

NÄCHSTE NUR 1 RETTEN

gib nur 1 Zeile zurück 

OFFSET 3 REIHEN

erste 3 Datensätze ausschließen Hier können Sie eine beliebige ganze Zahl eingeben 

0

Sie können dies versuchen:

select top(1) EXPORT_NO
from DC_HDR 
order by CASE when  (ROW_NUMBER() over(order by EXPORT_NO desc))=3 then EXPORT_NO else 0 end desc
0

Um den nth highest bonus abzufragen, sagen Sie n=10 mit AdventureWorks2012, versuchen Sie den folgenden Code

USE AdventureWorks2012; 
GO

SELECT * FROM Sales.SalesPerson;
GO

DECLARE @grade INT;
SET @grade = 10;
SELECT MIN(Bonus)
FROM (SELECT TOP (@grade) Bonus FROM (SELECT DISTINCT(Bonus) FROM Sales.SalesPerson) AS a ORDER BY Bonus DESC) AS g
0
Mahabubul Islam
select 
    Min(salary) 
from ( select salary from employees order by salary desc) t
where rownum<=3;

Ändern Sie für das 2. höchste Gehalt 3 bis 2 in der obigen Abfrage und für das N-te höchste Gehalt in N mit N = 1,2,3,4 ...

0
user2603985

SELECT * FROM (Auswahl eines bestimmten Gehalts aus der Bestellung des Kunden nach Gehalt DESC) Limit 4,1;

Limit 4,1 bedeutet, die ersten 4 Zeilen zu verlassen und dann die nächste auszuwählen.

Die Anzahl und Anzahl der Laufzeiten hängt von der verwendeten Plattform ab.

Versuchen Sie dies, es wird funktionieren.

0
Saif Grover

Probier diese...

SELECT MAX(salary) FROM employee WHERE salary NOT IN (SELECT * FROM employee ORDERBY salary DESC LIMIT n-1)
0
Deepak Kumar
select min(salary) 
from (select salary 
      from employee 
      where rownum < n+1 
      order by salary desc);
0
Ashok Ogirala

Zeigt alle 3. höchsten Gehälter an: 

select * from emp where sal=
(SELECT DISTINCT sal FROM emp ORDER BY sal DESC LIMIT 3,1) ;

Es wird nur das 3. höchste Gehalt angezeigt:

SELECT DISTINCT sal FROM emp ORDER BY sal DESC LIMIT 3,1
0
Gobi

Unterabfragen dauern immer mehr Zeit:

verwenden Sie unter Abfrage, um die höchsten und niedrigsten Daten zu erhalten:

Höchste Daten: select *from business order by id desc limit 3,1; 

Niedrigste Daten: select *from business order by id asc limit 3,1; 

Kann n anstelle von 3 verwenden, um n-te Daten zu erhalten.

0
Ankit Gupta

// Sie können das n-te Gehalt in Tabelle finden. Wenn Sie das zweithöchste Gehalt abrufen möchten, geben Sie n = 2 ein.

SELECT *  FROM tablename t1 
WHERE (N-1) = (SELECT COUNT(DISTINCT(t2.Salary)) 
 FROM tablename t2
WHERE t2.Salary > t1.Salary)
0
Mukesh Kumar