I found a very interesting question from one of the user of SQL group, his problem statement was
“I need to find each employee
salary along with the max salary of his department with a single line query”
It is very easy to find using SQL ‘Over by with Partition By clause’
Lets demonstrate it with an example. Here I am creating
Emp and Dept table and inserting few records in it.
create table Dept1
(dept_id int identity(1,1) primary key,
dname varchar(20))
Command(s) completed
successfully.
create table Emp2
(emp_id int identity(1,1) primary key,
emp_name varchar(20),
dept_id int references Dept1(dept_id),
salary float)
Command(s) completed
successfully.
insert into Dept1
select 'HR' union all
select 'IT' union all
select 'Account'
insert into Emp2
select 'Sudeepta', 1, 1000 union all
select 'Susmita', 1, 3000 union all
select 'Smruti', 3, 10000 union all
select 'Richa', 3, 8000 union all
select 'Sanjana', 1, 4000 union all
select 'Sweta', 2,4000 union all
select 'Deepa', 2,7000
Now since the data are there in the table, lets write
query to find each employee salary along with the maximum salary for his
department.
select e.emp_name, d.dname,e.salary, max(e.salary) over (partition by d.dept_id) MaxSalary from 
Emp2 e inner join Dept1 d
on e.dept_id = d.dept_id
emp_name             dname                salary                 MaxSalary
--------------------
-------------------- ---------------------- ----------
Sudeepta             HR                   1000                   4000
Susmita              HR                   3000                   4000
Sanjana              HR                   4000                   4000
Sweta                IT                   4000                   7000
Deepa                IT                   7000                   7000
Smruti               Account              10000                  10000
Richa                Account              8000                   10000
(7 row(s) affected)
So here we can from the output we have salary for each
employee along with the maximum salary of his department. We have simply used
aggregated function max along with ‘over with partition by clause’ which is
taking d.dept_id to partition the record to find the max salary of his
department.
I can’t sleep …until I die…My
passion SQL :)

