Skip to content

Commit 1522f3b

Browse files
committed
adding sql problems
1 parent 86eba25 commit 1522f3b

5 files changed

+115
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#How to find all levels of Employee Manager Hierarchy | Recursion
2+
#manager id is null then he is the top most manager in orgz
3+
#create table emmp(emp_id int,emp_name varchar(20),department_id int,manager_id int);
4+
select * from emmp;
5+
#insert into emmp values(1,'Adam Owens',103,3);
6+
#insert into emmp values(2,'Smith Jones',102,5);
7+
#insert into emmp values(3,'Hilary Riles',101,4);
8+
#insert into emmp values(4,'Richard Robinson',103,3);
9+
#insert into emmp values(5,'Samuel Pitt',103,3);
10+
#insert into emmp values(6,'Mark Miles',null,7);
11+
#insert into emmp values(7,'Jenny Jeff',999,null);
12+
13+
#name of the immediate manager
14+
select emp.emp_name as EmployeeName, mgr.emp_name as ManagerName from emmp emp
15+
inner join emmp mgr
16+
on emp.Manager_id=mgr.emp_id ;
17+
18+
with EmpMgrCTE
19+
AS(
20+
Select emp_id,emp_name,manager_id,0 as EmpLevel from emmp
21+
where manager_id is null
22+
union all
23+
Select EMPP.emp_id,EMPP.emp_name,EMPP.manager_id,mngr.EmpLevel+1
24+
from emmp EMPP
25+
INNER JOIN EmpMgrCTE AS mngr
26+
on empp.Manager_id = mngr.emp_id
27+
)
28+
select * from EmpMgrCTE
29+
order by EmpLevel;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#SQL Query to find a leap year | 2 methods
2+
#leap year
3+
#year divisible by 4 but not by 100
4+
#year divissible by 400
5+
#select cast(@year as char(4))+'0229' this will give 20210229
6+
7+
declare @year int = 2021;
8+
select cast(@year as char(4))+'0229' ;
9+
#CHECK IF DATE IS VALID 0 NOT VALID
10+
declare @year int = 2021;
11+
select ISDATE(cast(@year as char(4) ) +'0229');
12+
13+
#FINAL
14+
declare @year int = 2021;
15+
select CASE WHEN ISDATE(cast(@year as char(4) ) +'0229') = 1
16+
THEN 'LEAP YEAR'
17+
ELSE 'NOT A LEAP YEAR'
18+
END
19+
20+
#ANOTHER WAY
21+
declare @year int = 2020;
22+
SELECT case when (@year % 4 = 0 and @year % 100<>0) or @year % 400 = 0
23+
THEN 'LEAP YEAR'
24+
ELSE 'NOT A LEAP YEAR'
25+
END
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#How to generate date records for a Calendar table
2+
3+
declare @startdate date = '2020-01-01';
4+
declare @enddate date = '2020-12-31';
5+
6+
with cte_calender as (
7+
select @startdate as [date]
8+
union all
9+
select DATEADD(DD,1,[date])
10+
FROM cte_calender
11+
where DATEADD(DD,1,[date]) <= @enddate )
12+
select [date] from cte_calender
13+
OPTION (MAXRECURSION 400);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#What is the difference between Translate and Replace
2+
3+
#TRANSLATE(INPUT,CHARACTER,TRANSLATIONS) -works by replacing char,repalce char,need to specify equal no. of characters
4+
#replace (string_expression,string_pattern,string_replacement) -replaces entire string,replace string,can also replace a string of varying length
5+
select TRANSLATE('xxx1234567891zzz','123456789','abcdefghi');
6+
#1-a,2-b,3-c,4-d,e-5,f-6,g-7,h-8,i-9,1-a
7+
select replace('1234567891','123456789','abcdefghi');
8+
9+
select replace('1234567891','123456789','a');
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#create table userss (user_id integer,name varchar(20),join_date date);
2+
#insert into userss values (1, 'Jon','2020-02-14'), (2, 'Jane', '2020-02-14'), (3, 'Jill','2020-02-15' ), (4, 'Josh','2020-02-15'), (5, 'Jean','2020-02-16'), (6, 'Justin','2020-02-17'),(7, 'Jeremy', '2020-02-18');
3+
select * from userss;
4+
#delete from userss;
5+
#create table events(user_id integer,type varchar(10),access_date date);
6+
#insert into events values (1, 'Pay', '2020-03-01'), (2, 'Music', '2020-03-02'), (2, 'P', '2020-03-12'),(3, 'Music', '2020-03-15'), (4, 'Music','2020-03-15'), (1, 'P', '2020-03-16'), (3, 'P', '2020-03-22');
7+
8+
select * from userss;
9+
select * from events;
10+
#Given the following two tables, return the fraction of users, rounded to two decimal places,
11+
#who accessed Amazon music and upgraded to prime membership within the first 30 days of signing up.
12+
#p stands for when user purchase prime membership
13+
#10 users,5 access amazon music,only 2 purchase prime membership ,ratio 2 divide by 5 =40%
14+
15+
#find who access amazon music
16+
select * from userss
17+
where user_id in (select user_id from events where type='Music');
18+
#out of this i have to check how many have subscibed to amazon prime within 30 dyas of joining date
19+
#need access date when they converted there membership to prime membership
20+
#left join there woulb be users who did not join prime membership
21+
select u.*,e.type,e.access_date from userss u
22+
left join events e on u.user_id=e.user_id and e.type='P'
23+
where u.user_id in (select user_id from events where type='Music');
24+
25+
#calculate the difference also
26+
select u.*,e.type,e.access_date,datediff(day,u.join_date,e.access_date) as no_of_days from userss u
27+
left join events e on u.user_id=e.user_id and e.type='P'
28+
where u.user_id in (select user_id from events where type='Music');
29+
30+
#
31+
#CASE When datediff(day,u.join_date,e.access_date) <=30 then user_id -->who bought in 30 days taking user_id
32+
33+
select #u.*,e.type,e.access_date,datediff(day,u.join_date,e.access_date) as no_of_days from userss u
34+
count(distinct u.user_id) as total_users,count(distinct CASE When datediff(day,u.join_date,e.access_date) <=30 then user_id end)
35+
,1.0*count(distinct CASE When datediff(day,u.join_date,e.access_date) <=30 then user_id end) / count(distinct u.user_id) * 100
36+
from userss u
37+
left join events e on u.user_id=e.user_id and e.type='P'
38+
where u.user_id in (select user_id from events where type='Music')
39+

0 commit comments

Comments
 (0)