-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwindow_case_statements.sql
73 lines (52 loc) · 2.1 KB
/
window_case_statements.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
### Window Functions ---
### 1. row_number() #### It will just assign some values over clause
use employees;
select * from salaries;
#### Row Number --
select emp_no, salary, row_number() over() as Row_num
from salaries;
select emp_no, salary, row_number() over(partition by emp_no order by salary desc) as Row_num
from salaries;
select a.emp_no, max(salary) as max_salary from
(select emp_no, salary, row_number() over (partition by emp_no order by salary desc) as Row_num from salaries)
a group by emp_no;
select a.emp_no, max(salary) as max_salary from
(select emp_no, salary from salaries) a group by emp_no;
#### Rank and Dense Rank
select emp_no, salary, rank() over(partition by emp_no order by salary desc) as Rank_
from salaries;
select emp_no, salary, dense_rank() over(partition by emp_no order by salary desc) as Rank_
from salaries;
select emp_no, salary, rank() over(partition by emp_no order by salary desc) as Rank_
from salaries where emp_no = 11839;
select emp_no, salary, dense_rank() over(partition by emp_no order by salary desc) as Rank_
from salaries where emp_no = 11839;
#### Lag and Lead Functions ### Lag stands for previous and lead for the next one
select * from salaries;
select emp_no, salary, from_date, lag(salary,2) over(partition by from_date) as Lag_
from salaries ;
select emp_no, salary, lead(salary,2) over(partition by emp_no order by salary desc) as lead_
from salaries ;
### Aggregate Function - MAX, MIn, Avg,count
select * ,
max(salary) over(partition by emp_no) max_salary,
min(salary) over(partition by emp_no) min_salary
from salaries;
select * ,
avg(salary) over(partition by emp_no) sum_salary
from salaries;
#### If Condittion
select * from employees;
select emp_no,first_name, last_name,
if(gender = 'M', 'Male', 'Female') as gender
from employees;
#### Case Statement
select emp_no,first_name, last_name,
case gender when 'M' then 'Male'
else 'Female' end as gender
from employees;
select * from salaries;
select emp_no, salary,
case when salary < 65000 then 'Salary less_than 65K'
when salary > 65000 then 'Salary greater tha 65K' end as Salary_bracket
from salaries;