কিভাবে অনুকূলিত উপায়ে বেতন থেকে তৃতীয় বা n তমতম বেতন পাবেন table(EmpID, EmpName, EmpSalary)
?
SELECT salary FROM (SELECT salary FROM employee ORDER BY salary DESC FETCH NEXT 3 ROWS ONLY) ORDER BY salary ASC FETCH NEXT 1 ROWS ONLY;
কিভাবে অনুকূলিত উপায়ে বেতন থেকে তৃতীয় বা n তমতম বেতন পাবেন table(EmpID, EmpName, EmpSalary)
?
SELECT salary FROM (SELECT salary FROM employee ORDER BY salary DESC FETCH NEXT 3 ROWS ONLY) ORDER BY salary ASC FETCH NEXT 1 ROWS ONLY;
উত্তর:
ব্যবহারের 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
EmpSalary
কলামে আপনার কোনও সূচি নেই । এছাড়াও, কি তুলনায় হ্রাস? ROW_NUMBER
পদ্ধতির সুবিধা হ'ল আপনি ব্যবহার করতে পারেন ..OVER(PARTITION BY GroupColumn OrderBy OrderColumn)
। সুতরাং আপনি গ্রুপগুলি পেতে এটি ব্যবহার করতে পারেন তবে এর যে কোনও কলামে অ্যাক্সেস করতে পারেন।
সারি সংখ্যা:
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
... WHERE (N-1) = (Subquery)...
কাজ করে তা বোঝা গুরুত্বপূর্ণ । সাবকিউরিটি একটি সম্পর্কিত সম্পর্কযুক্ত ক্যোয়ারী, যেহেতু এর WHERE
ধারাটি Emp1
মূল কোয়েরি থেকে ব্যবহার করে। সাবকিউরিটি প্রতিটি সারির মূল ক্যোয়ারির স্ক্যানের সময় মূল্যায়ন করা হয়। উদাহরণস্বরূপ, যদি আমরা (800, 1000, 700, 750) থেকে তৃতীয় বৃহত্তম বেতন (এন = 3) সন্ধান করি তবে 1 ম সারির সাবকোয়ারিটি SELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2 WHERE Emp2.Salary > 800
0 হবে। চতুর্থ বেতনের মূল্য (750) ... WHERE Emp2.Salary > 750
হবে 2, বা এন -1, সুতরাং এই সারিটি ফিরে আসবে।
আপনি যদি অনুকূলিতকরণের উপায়ের অর্থ TOP
কীওয়ার্ডটি ব্যবহার করতে চান , তবে নবম সর্বাধিক এবং ন্যূনতম বেতনের ক্যোয়ারী নীচের অনুসারে তবে প্রশ্নগুলি মোট ফাংশন নামগুলি ব্যবহার করে বিপরীত ক্রমের মতো দেখতে জটিল বলে মনে হচ্ছে:
এন সর্বাধিক বেতন:
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)
আপনি যদি সাব কোয়েরি ব্যবহার করেন তবে খুব সহজ!
SELECT MIN(EmpSalary) from (
SELECT EmpSalary from Employee ORDER BY EmpSalary DESC LIMIT 3
);
আপনি এখানে সীমাবদ্ধতার পরে কেবলমাত্র নবম মান পরিবর্তন করতে পারেন।
এখানে এই সাব কোয়েরিতে এমপ্যালেরি ডিইএসসি সীমা 3 দ্বারা কর্মচারী আদেশ থেকে এমপ্যাসারি নির্বাচন করুন; কর্মচারীদের শীর্ষ 3 বেতন প্রদান করবে। ফলাফলের বাইরে আমরা কর্মচারীর তৃতীয় শীর্ষস্থানীয় বেতন পেতে এমআইএন কমান্ড ব্যবহার করে ন্যূনতম বেতনটি বেছে নেব।
আপনার সর্বোচ্চ নম্বর দিয়ে এন প্রতিস্থাপন করুন
SELECT *
FROM Employee Emp1
WHERE (N-1) = (
SELECT COUNT(DISTINCT(Emp2.Salary))
FROM Employee Emp2
WHERE Emp2.Salary > Emp1.Salary)
ব্যাখ্যা
উপরের ক্যোয়ারীটি বেশ বিভ্রান্তিকর হতে পারে যদি আপনি এর আগে এর মতো কিছু না দেখেন - অভ্যন্তরীণ কোয়েরিটিকে একে কোলেলেটেড সাব-কোয়েরি বলা হয় কারণ অভ্যন্তরীণ কোয়েরি (সাবকোয়ারি) বাইরের কোয়েরি থেকে একটি মান ব্যবহার করে (এক্ষেত্রে এমপি 1 টেবিল) ) এটিতে যেখানে ক্লজ রয়েছে।
এবং উত্স
... WHERE (N-1) = (Subquery)...
কাজ করে তা বোঝা গুরুত্বপূর্ণ । সাবকিউরিটি একটি সম্পর্কিত সম্পর্কযুক্ত ক্যোয়ারী, যেহেতু এর WHERE
ধারাটি Emp1
মূল কোয়েরি থেকে ব্যবহার করে। সাবকিউরিটি প্রতিটি সারির মূল ক্যোয়ারির স্ক্যানের সময় মূল্যায়ন করা হয়। উদাহরণস্বরূপ, যদি আমরা (800, 1000, 700, 750) থেকে তৃতীয় বৃহত্তম বেতন (এন = 3) সন্ধান করি তবে 1 ম সারির সাবকোয়ারিটি SELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2 WHERE Emp2.Salary > 800
0 হবে। চতুর্থ বেতনের মূল্য (750) ... WHERE Emp2.Salary > 750
হবে 2, বা এন -1, সুতরাং এই সারিটি ফিরে আসবে।
সাবকিউরি ব্যবহার না করে বেতন টেবিল থেকে তৃতীয় বা নবম সর্বাধিক বেতন
select salary from salary
ORDER BY salary DESC
OFFSET N-1 ROWS
FETCH NEXT 1 ROWS ONLY
তৃতীয় সর্বোচ্চ বেতনের জন্য এন -১ এর স্থলে 2 রাখুন
SELECT Salary,EmpName
FROM
(
SELECT Salary,EmpName,DENSE_RANK() OVER(ORDER BY Salary DESC) Rno from EMPLOYEE
) tbl
WHERE Rno=3
SELECT EmpSalary
FROM salary_table
GROUP BY EmpSalary
ORDER BY EmpSalary DESC LIMIT n-1, 1;
নবম সর্বাধিক বেতন পাওয়ার জন্য নিম্নলিখিত কোয়েরিটি দেখুন। এইভাবে আপনি এমওয়াইএসকিউএলে নবম সর্বাধিক বেতন পাবেন get আপনি যদি নবম সর্বনিম্ন বেতন পেতে চান তবে আপনার প্রশ্নের মধ্যে এএসসি দ্বারা DESC প্রতিস্থাপন করতে হবে।
পদ্ধতি 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
২০০৮-এ আমরা ব্যবহার করতে পারি এমন কোনও সম্পর্ক ছাড়াই র্যাঙ্ক পেতে আমরা ROW_NUMBER () ওভার (এমপসালারি ডিইএসসি বাই অর্ডার) ব্যবহার করতে পারি।
উদাহরণস্বরূপ আমরা এইভাবে 8 তম সর্বোচ্চ পেতে পারি বা @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;
এসকিউএল সার্ভারে 2012 আপনি সম্ভবত জানেন যে এটি আরও স্বজ্ঞাতভাবে LAG () ব্যবহার করে সম্পাদিত হয়।
declare @maxNthSal as nvarchar(20)
SELECT TOP 3 @maxNthSal=GRN_NAME FROM GRN_HDR ORDER BY GRN_NAME DESC
print @maxNthSal
টেবিল থেকে তৃতীয় সর্বোচ্চ মান পেতে
SELECT * FROM tableName ORDER BY columnName DESC LIMIT 2, 1
যে কোনও এসকিউএল সাক্ষাত্কারে এটি অন্যতম জনপ্রিয় প্রশ্ন। আমি একটি কলামের নবম সর্বোচ্চ মান খুঁজে বের করতে বিভিন্ন প্রশ্ন লিখতে চলেছি।
আমি নীচের স্ক্রিপ্টটি চালিয়ে "Emloyee" নামে একটি সারণী তৈরি করেছি।
CREATE TABLE Employee([Eid] [float] NULL,[Ename] [nvarchar](255) NULL,[Basic_Sal] [float] NULL)
এখন আমি এই সারণিতে 8 টি সারি সন্নিবেশ করতে যাচ্ছি নীচে সন্নিবেশ বিবৃতিটি চালিয়ে।
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)
এখন আমরা উপরের সারণী থেকে বিভিন্ন কোয়েরি ব্যবহার করে তৃতীয় সর্বোচ্চ বেসিক_সালটি সন্ধান করব। আমি ম্যানেজমেন্ট স্টুডিওতে নীচের ক্যোয়ারী চালিয়েছি এবং ফলাফলটি নীচে রয়েছে।
select * from Employee order by Basic_Sal desc
আমরা উপরের চিত্রটিতে দেখতে পাচ্ছি যে তৃতীয় সর্বোচ্চ বেসিক বেতন 8500 হবে I আমি একইভাবে কাজ করার 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
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;
আমি তৃতীয় সর্বোচ্চ বেতন প্রদর্শন করছি
SELECT MIN(COLUMN_NAME)
FROM (
SELECT DISTINCT TOP 3 COLUMN_NAME
FROM TABLE_NAME
ORDER BY
COLUMN_NAME DESC
) AS 'COLUMN_NAME'
- সর্বোচ্চ বেতন
select *
from (select lstName, salary, row_number() over( order by salary desc) as rn
from employee) tmp
where rn = 2
- (নবম -১) সর্বোচ্চ বেতন
select *
from employee e1
where 1 = (select count(distinct salary)
from employee e2
where e2.Salary > e1.Salary )
অনুকূলিতকরণের উপায়: উপক্রমের পরিবর্তে কেবল সীমা ব্যবহার করুন।
select distinct salary from employee order by salary desc limit nth, 1;
এখানে সীমাবদ্ধতা দেখুন http://www.mysqltutorial.org/mysql-limit.aspx
সাবকিউরি দ্বারা:
SELECT salary from
(SELECT rownum ID, EmpSalary salary from
(SELECT DISTINCT EmpSalary from salary_table order by EmpSalary DESC)
where ID = nth)
এই প্রশ্নের চেষ্টা করুন
SELECT DISTINCT salary
FROM emp E WHERE
&no =(SELECT COUNT(DISTINCT salary)
FROM emp WHERE E.salary <= salary)
N = রাখুন যা আপনি চান মান
set @n = $n
SELECT a.* FROM ( select a.* , @rn = @rn+1 from EMPLOYEE order by a.EmpSalary desc ) As a where rn = @n
এই কোডটি ব্যবহার করে দেখুন: -
SELECT *
FROM one one1
WHERE ( n ) = ( SELECT COUNT( one2.salary )
FROM one one2
WHERE one2.salary >= one1.salary
)
একটি টেবিল থেকে নবম সর্বোচ্চ বেতন সন্ধান করুন। ঘন_রঙ্ক () ফাংশনটি ব্যবহার করে এই কাজটি করার একটি উপায়।
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: ১. DENSE_RANK একটি আদেশিত সারিগুলির একটি গোষ্ঠীতে একটি সারির র্যাঙ্ক গণনা করে এবং একটি সংখ্যা হিসাবে র্যাঙ্কটি প্রদান করে। র্যাঙ্কগুলি ধারাবাহিকভাবে পূর্ণসংখ্যার সাথে শুরু হয় ১. ২. এই ফাংশনটি কোনও সংখ্যক ডেটা টাইপ হিসাবে আর্গুমেন্ট গ্রহণ করে এবং NUMBER প্রদান করে। ৩. অ্যানালিটিক ফাংশন হিসাবে, ডেনস_আরএনके ক্রম_সামগ্রী_এর মান_এক্সপ্রেসের মানগুলির উপর ভিত্তি করে, অন্য সারিগুলির প্রতি শ্রদ্ধার সাথে একটি ক্যোয়ারী থেকে প্রাপ্ত প্রতিটি সারির র্যাঙ্ক গণনা করে। ৪. উপরোক্ত ক্যোয়ারিতে কর্মচারী সারণীর সালার ভিত্তিতে পদমর্যাদায় ফিরে আসে টাই ক্ষেত্রে, এটি সমস্ত সারি সমান র্যাঙ্ক বরাদ্দ করে।
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
এসকিউএল সার্ভার ২০১২+ এ, অফসেট ... FETCH এটি অর্জনের কার্যকর উপায় হবে:
DECLARE @N AS INT;
SET @N = 3;
SELECT
EmpSalary
FROM
dbo.Salary
ORDER BY
EmpSalary DESC
OFFSET (@N-1) ROWS
FETCH NEXT 1 ROWS ONLY
select * from employee order by salary desc;
+------+------+------+-----------+
| id | name | age | salary |
+------+------+------+-----------+
| 5 | AJ | 20 | 100000.00 |
| 4 | Ajay | 25 | 80000.00 |
| 2 | ASM | 28 | 50000.00 |
| 3 | AM | 22 | 50000.00 |
| 1 | AJ | 24 | 30000.00 |
| 6 | Riu | 20 | 20000.00 |
+------+------+------+-----------+
select distinct salary from employee e1 where (n) = (select count( distinct(salary) ) from employee e2 where e1.salary<=e2.salary);
সংখ্যা হিসাবে n টি নবমতম বেতনের সাথে প্রতিস্থাপন করুন।
কেবলমাত্র অভ্যন্তরীণ ক্যোয়ারির মানটি পরিবর্তন করুন: উদাহরণস্বরূপ ClassID desc দ্বারা শিক্ষার্থী_আইনফো আদেশ থেকে শীর্ষ (2) * নির্বাচন করুন
উভয় সমস্যার জন্য ব্যবহার করুন:
Select Top (1)* from
(
Select Top (1)* from Student_Info order by ClassID desc
) as wsdwe
order by ClassID
এটিকে জিজ্ঞাসা করতে nth highest bonus
, n=10
অ্যাডভেঞ্চার ওয়ার্কস ২০১২ ব্যবহার করে বলুন , অনুসরণ করার কোডটি চেষ্টা করুন
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