it-swarm.asia

كيفية العثور على الراتب الثالث أو التاسع من جدول الرواتب؟

كيفية العثور على third or nth أقصى راتب من الراتب table(EmpID,EmpName,EmpSalary) بطريقة محسنة؟

89
Karan Gandhi

استخدم ROW_NUMBER (إذا كنت تريد واحدة) أو DENSE_RANK (لجميع الصفوف ذات الصلة):

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
72
Rango

رقم الصف :

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)

استعلام فرعي:

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

أهم الكلمات الرئيسية:

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

جرب هذا

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

لمدة 3 يمكنك استبدال أي قيمة ...

53
Codesen

إذا كنت ترغب في تحسين الطريقة ، فتعني استخدام TOP Keyword ، وبالتالي فإن الاستعلام عن الرواتب القصوى والدقيقة n كالتالي ولكن الاستعلامات تبدو صعبة كما في الترتيب العكسي باستخدام أسماء الدوال التجميعية:

N الراتب الأقصى:

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

على سبيل المثال: 3 الحد الأقصى للراتب:

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

الحد الأدنى للراتب:

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

على سبيل المثال: 3 الحد الأدنى للراتب:

SELECT MAX(EmpSalary)
FROM Salary
WHERE EmpSalary IN(SELECT TOP 3 EmpSalary FROM Salary ORDER BY EmpSalary ASC)
37
Rajesh Pathakoti

بسيط جدًا إذا كنت تستخدم الاستعلام الفرعي!

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

يمكنك هنا فقط تغيير القيمة nth بعد القيد LIMIT.

في هذا الاستعلام الفرعي ، حدد EmpSalary من Order Employee Order حسب EmpSalary DESC Limit 3؛ سيعود أعلى 3 رواتب الموظفين. من النتيجة ، سنختار الحد الأدنى للراتب باستخدام أمر MIN للحصول على راتب TOP الثالث للموظف.

13
devutkarsh

استبدل N برقمك الأقصى

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

تفسير

يمكن أن يكون الاستعلام أعلاه مربكًا تمامًا إذا لم ترَ شيئًا يشبهه من قبل - الاستعلام الداخلي هو ما يسمى الاستعلام الفرعي المرتبط لأن الاستعلام الداخلي (الاستعلام الفرعي) يستخدم قيمة من الاستعلام الخارجي (في هذه الحالة جدول Emp1 ) في جملة أين.

والمصدر

12
Luv

الحد الأقصى الثالث أو الثالث من الراتب من جدول الرواتب دون استخدام استعلام فرعي

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

للحصول على أعلى راتب 3 ضع 2 في مكان 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

راجع الاستعلام التالي للحصول على أعلى راتب. بهذه الطريقة تحصل على أعلى راتب في MYSQL. إذا كنت ترغب في الحصول على أقل راتب في المرتبة الأولى ، فأنت بحاجة إلى استبدال DESC بـ ASC في الاستعلام. nth highest salary

6
Vijay Bhatt

طريقة 1:

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

الطريقة 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
SELECT EmpSalary 
FROM salary_table 
GROUP BY EmpSalary 
ORDER BY EmpSalary DESC LIMIT n-1, 1;
4
Saurabh Chandra Patel

في عام 2008 ، يمكننا استخدام ROW_NUMBER () OVER (ORDER BY EmpSalary DESC) للحصول على تصنيف بدون روابط يمكننا استخدامها.

على سبيل المثال ، يمكننا الحصول على المرتبة الثامنة على هذا النحو ، أو تغيير @ N إلى شيء آخر أو استخدامه كمعلمة في وظيفة إذا أردت.

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;

في SQL Server 2012 كما تعلمون ، يتم تنفيذ ذلك بطريقة أكثر حدسية باستخدام 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
Uma Shankar Lakhera

- أعلى راتب

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

- (رقم -1) أعلى راتب

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;

أنا تظهر ثالث أعلى راتب

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

هذا هو أحد الأسئلة الشائعة في أي مقابلة مع SQL. سأقوم بكتابة استفسارات مختلفة لمعرفة القيمة الأعلى للعمود.

لقد قمت بإنشاء جدول يسمى "Emloyee" عن طريق تشغيل البرنامج النصي أدناه.

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

الآن سأقوم بإدراج 8 صفوف في هذا الجدول عن طريق تشغيل أدناه عبارة insert.

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)

الآن سنكتشف ثالث أعلى Basic_sal من الجدول أعلاه باستخدام استعلامات مختلفة. لقد قمت بتشغيل الاستعلام أدناه في إدارة الاستوديو وأدناه هي النتيجة.

select * from Employee order by Basic_Sal desc

يمكننا أن نرى في الصورة أعلاه أن ثالث أعلى راتب أساسي سيكون 8500. أنا أكتب 3 طرق مختلفة لفعل الشيء نفسه. من خلال تشغيل الاستعلامات الثلاثة المذكورة أدناه ، سنحصل على نفس النتيجة ، أي 8500.

الطريقة الأولى: - استخدام وظيفة رقم الصف

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
Neeraj Kumar Yadav

الطريقة المثلى: بدلاً من الاستعلام الفرعي ، استخدم الحد.

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

انظر بناء الجملة الحد هنا http://www.mysqltutorial.org/mysql-limit.aspx

2
Kishor Vitekar

بواسطة استعلام فرعي:

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

جرب هذا الاستعلام

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

ضع n = القيمة التي تريدها

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
Saurabh Chandra Patel

للحصول على ثالث أعلى قيمة من الجدول

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

جرب هذا الكود: -

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

حل اختبار MySQL ، افترض N = 4:

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

مثال آخر:

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

طريقة أخرى للعثور على آخر أعلى البيانات بناءً على التاريخ

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

العثور على أعلى راتب Nth من الجدول. إليك طريقة للقيام بهذه المهمة باستخدام دالة 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 يحسب ترتيب صف في مجموعة مرتبة من الصفوف وإرجاع التصنيف ك NUMBER. الصفوف هي أعداد صحيحة متتالية تبدأ بـ 1. 2. تقبل هذه الدالة الوسائط كأي نوع بيانات رقمي وتُرجع NUMBER. 3. كدالة تحليلية ، يحسب DENSE_RANK ترتيب كل صف يتم إرجاعه من استعلام فيما يتعلق بالصفوف الأخرى ، استنادًا إلى قيم value_exprs في order_by_clause. 4. في الاستعلام أعلاه ، يتم إرجاع التصنيف بناءً على جدول جدول الموظف. في حالة التعادل ، فإنه يعين رتبة متساوية لجميع الصفوف.

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

ملاحظة: يرجى استبدال OFFSET 3 في الاستعلام برقم أي عدد صحيح

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

الوصف

جلب التالي 1 صفوف فقط

إرجاع صف واحد فقط

أوفست 3 صفوف

استبعاد أول 3 سجلات هنا يمكنك من أي رقم صحيح

0
Hardik Masalawala

يمكنك تجربة هذا:

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
Uma Shankar Lakhera

للاستعلام عن nth highest bonus ، قل n=10 ، باستخدام AdventureWorks2012 ، جرب اتباع الكود

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;

للحصول على ثاني أعلى راتب ، قم بتغيير 3 إلى 2 في الاستعلام أعلاه ولأعلى راتب N إلى N حيث N = 1،2،3،4 ....

0
user2603985

SELECT * FROM (حدد الراتب المتميز من طلب العملاء حسب الراتب DESC) الحد 4.1

الحد 4،1 يعني ترك الصفوف الأربعة الأولى ثم حدد الصف التالي.

يعتمد الحد والخانة على النظام الأساسي الذي تستخدمه.

جرب هذا ، سوف يعمل.

0
Saif Grover

جرب هذه...

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

عرض الكل ثالث أعلى راتب:

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

عرض فقط ثالث أعلى راتب:

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

تستغرق الاستعلامات الفرعية دائمًا مزيدًا من الوقت:

استخدم أدناه الاستعلام للحصول على أعلى وأقل البيانات:

أعلى البيانات: select *from business order by id desc limit 3,1;

أدنى البيانات: select *from business order by id asc limit 3,1;

يمكن استخدام N في مكان 3 للحصول على البيانات nth.

0
Ankit Gupta