Professional Documents
Culture Documents
select emp_data.empid,emp_data.fname,salary,dept_name,emp_data.loc
from emp_data
left join
dept
on emp_data.empid=dept.empid
and dept.dept_name='HR'
where emp_data.loc='chicago';
-- and condition;
/*
group by. partition by
returns one row for each group returns all rows along with the
additional column of aggregated values
cant use non-aggregated column can use all required columns in
select
in select
sum,min,max,avg,count
row_number(),lag(),lead(),rank(),dense_rank()
*/
-- fetch the first 2 emp from each dept to join the compny
select * from (
select * ,
row_number() over (partition by dept_name order by emp_id) as rn
from emp) sq
where rn<3;
-- fetch the top 3 emp from each dept earning max salary
-- rank () : -- assigns ranks with gap
-- mandatory order by clause
-- dense_rank() : assigns ranks without gaps
select * from (
select * ,
rank() over (partition by dept_name order by salary desc) as rnk,
dense_rank() over (partition by dept_name order by salary desc) as
dense_rnk,
row_number() over (partition by dept_name order by salary desc) as rn
from emp) sq
where dense_rnk<4;
select *,
lead(salary,2) over () as next_sal ,
lag(salary,2) over () as priv_sal from emp;
select *,
lead(salary,1,0) over () as next_sal ,
lag(salary,1,0) over () as priv_sal from emp;
select *,
lag(distance_travlled,1,0) over (partition by cars) ,
distance_travlled - lag(distance_travlled,1,0) over (partition by cars) as
dis_per_day
from cars;
/*
row_number() : assigns the index value to each row os the partition
rank() : assigns ranks to each row of the partition but with gaps
,it is mandatory to use order by with it
dense_rank() : assigns ranks to each row of the partition but without gaps
,it is mandatory to use order by with it
lead(column_name,offset,default_value)
-- : it fetches the next row value for a column
-- : offset : defines which next value /step size
-- : default value : if preceeding row is not present,populate this
default value
lag(column_name,offset,default_value)
-- : it fetches the previous row value for a column
-- : offset : defines which previous value /step size
-- : default value : if previous row is not present,populate this default
value
*/
-- self join
select * from emp_data;
-- employees who are managers
select e.empid,e.mgr_id,e.fname,e.salary
from emp_data e
join emp_data d
on e.empid=d.mgr_id;
/*
inner join /join
left join /left outer join
right join /right outer join
full join /full outer join
*/