pengembangan-web-mp.com

Bagaimana menemukan gaji maksimum ketiga atau ke-tiga dari tabel gaji?

Bagaimana menemukan third or nth gaji maksimum dari gaji table(EmpID,EmpName,EmpSalary) dengan cara yang Dioptimalkan?

87
Karan Gandhi

Gunakan ROW_NUMBER (jika Anda ingin satu) atau DENSE_RANK (untuk semua baris terkait):

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

Nomor baris:

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)

Sub Query:

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

Kata kunci teratas:

SELECT TOP 1 salary
FROM (
      SELECT DISTINCT TOP n salary
      FROM employee
      ORDER BY salary DESC
      ) a
ORDER BY salary
79
Kumar Manish-PMP

Coba ini 

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

Untuk 3 Anda dapat mengganti nilai apa pun ...

48
Codesen

Jika Anda ingin cara mengoptimalkan berarti menggunakan TOP Kata Kunci, Jadi nth max dan min gaji permintaan sebagai berikut tetapi permintaan terlihat seperti rumit seperti dalam urutan terbalik dengan menggunakan nama fungsi agregat:

N gaji maksimum:

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

untuk Mis: 3 gaji maksimum:

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

N gaji minimum:

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

untuk Mis: 3 gaji minimum:

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

Terlalu sederhana jika Anda menggunakan permintaan sub!

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

Anda di sini hanya dapat mengubah nilai n setelah batasan LIMIT.

Di sini, di dalam ini, permintaan Sub Pilih EmpSalary dari Pesanan Karyawan oleh EmpSalary DESC Limit 3; akan mengembalikan 3 gaji teratas Karyawan. Dari hasilnya kita akan memilih gaji Minimum menggunakan perintah MIN untuk mendapatkan gaji TOP ke-3 dari karyawan.

12
devutkarsh

Ganti N dengan Nomor Maks Anda

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

Penjelasan

Kueri di atas bisa sangat membingungkan jika Anda belum pernah melihat yang seperti itu sebelumnya - kueri batin adalah apa yang disebut sub-kueri berkorelasi karena kueri dalam (subquery) menggunakan nilai dari kueri luar (dalam hal ini tabel Emp1 ) di dalamnya klausa WHERE.

Dan Sumber

12
Luv

Gaji maksimum ketiga atau ke-n dari tabel gaji tanpa menggunakan subquery 

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

Untuk gaji tertinggi ke-3, taruh 2 sebagai ganti 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

Metode 1:

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

Metode 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

Lihat permintaan berikut untuk mendapatkan gaji tertinggi ke-n. Dengan cara ini Anda mendapatkan gaji tertinggi ke-5 di MYSQL. Jika Anda ingin mendapatkan gaji terendah ke-3 saja Anda harus mengganti DESC dengan ASC dalam kueri. nth highest salary

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

Pada 2008 kita bisa menggunakan ROW_NUMBER () OVER (ORDER BY EmpSalary DESC) untuk mendapatkan peringkat tanpa ikatan yang bisa kita gunakan.

Misalnya kita bisa mendapatkan yang tertinggi ke-8 dengan cara ini, atau mengubah @N menjadi sesuatu yang lain atau menggunakannya sebagai parameter dalam suatu fungsi jika Anda mau.

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;

Di SQL Server 2012 seperti yang Anda ketahui ini dilakukan lebih intuitif menggunakan LAG ().

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

- gaji tertinggi 

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

- (n -1) gaji tertinggi

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;

Saya menunjukkan gaji tertinggi ke-3

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

Ini adalah salah satu pertanyaan populer dalam setiap wawancara SQL. Saya akan menuliskan pertanyaan yang berbeda untuk mengetahui nilai tertinggi kolom ke-n.

Saya telah membuat tabel bernama "Emloyee" dengan menjalankan skrip di bawah ini.

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

Sekarang saya akan memasukkan 8 baris ke tabel ini dengan menjalankan pernyataan insert di bawah ini.

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)

Sekarang kita akan menemukan Basic_sal ke-3 tertinggi dari tabel di atas menggunakan pertanyaan yang berbeda . Saya telah menjalankan query di bawah ini di studio manajemen dan di bawah ini hasilnya.

select * from Employee order by Basic_Sal desc

Kita dapat melihat pada gambar di atas bahwa Gaji Dasar tertinggi ke-3 adalah 8500. Saya menulis 3 cara berbeda untuk melakukan hal yang sama. Dengan menjalankan ketiga kueri yang disebutkan di bawah ini, kita akan mendapatkan hasil yang sama yaitu 8500.

Cara Pertama: - Menggunakan fungsi nomor baris

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

Cara yang dioptimalkan: Alih-alih subquery cukup gunakan batas.

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

Lihat batas sintaks di sini http://www.mysqltutorial.org/mysql-limit.aspx

2
Kishor Vitekar

Dengan subquery:

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

Coba Pertanyaan ini

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

Masukkan n = nilai mana yang Anda inginkan

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
1

Untuk mendapatkan nilai tertinggi ketiga dari tabel 

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

Coba kode ini: -

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

Solusi yang diuji MySQL, asumsikan N = 4:

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

Contoh lain:

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

cara lain untuk menemukan data tertinggi terakhir berdasarkan tanggal 

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

Temukan gaji tertinggi ke-N dari tabel. Berikut adalah cara untuk melakukan tugas ini menggunakan fungsi dense_rank ().

 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 menghitung pangkat baris dalam grup baris yang dipesan dan mengembalikan peringkat sebagai NUMBER. Peringkat tersebut adalah bilangan bulat berurutan yang dimulai dengan 1 . 2. Fungsi ini menerima argumen sebagai tipe data numerik apa pun dan mengembalikan NUMBER . 3. Sebagai fungsi analitik, DENSE_RANK menghitung peringkat setiap baris yang dikembalikan dari kueri sehubungan dengan baris lainnya, berdasarkan nilai value_exprs di order_by_clause . Dalam kueri di atas pangkat dikembalikan berdasarkan sal dari tabel karyawan. Dalam hal seri, itu memberikan peringkat yang sama untuk semua baris.

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

CATATAN: Silakan ganti OFFSET 3dalam Permintaan dengan nomor integer NTH APA 

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

Keterangan 

FETCH BERIKUTNYA 1 BARANG HANYA

kembalikan hanya 1 baris 

OFFSET 3 BARIS

mengecualikan 3 catatan pertama Di sini Anda dapat Anda nomor integer 

0

Anda dapat mencoba ini:

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

Untuk meminta nth highest bonus, katakan n=10, menggunakan AdventureWorks2012, Coba Ikuti kode

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;

Untuk gaji tertinggi ke-2, Ubah 3 ke 2 dalam kueri di atas dan untuk gaji tertinggi ke-N ke N di mana N = 1,2,3,4 ....

0
user2603985

PILIH * DARI (pilih Gaji berbeda dari pesanan Pelanggan dengan gaji DESC) batas 4,1;

Batas 4,1 berarti meninggalkan 4 baris pertama dan kemudian pilih yang berikutnya.

Batas dan jumlah minimum tergantung pada platform yang Anda gunakan.

Coba ini, ini akan berhasil.

0
Saif Grover

Coba yang ini...

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

Menampilkan semua gaji tertinggi ke-3: 

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

Hanya menampilkan gaji tertinggi ke-3:

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

Subquery selalu membutuhkan lebih banyak waktu:

gunakan kueri di bawah ini untuk mendapatkan data tertinggi dan terendah:

Data Tertinggi: select *from business order by id desc limit 3,1; 

Data terendah: select *from business order by id asc limit 3,1; 

Dapat menggunakan N di tempat 3 untuk mendapatkan data ke-n.

0
Ankit Gupta