diff --git a/problem1.sql b/problem1.sql new file mode 100644 index 0000000..d317a47 --- /dev/null +++ b/problem1.sql @@ -0,0 +1,28 @@ +WITH all_dates AS ( + SELECT fail_date AS date, 'failed' AS state FROM Failed + WHERE fail_date BETWEEN '2019-01-01' AND '2019-12-31' + UNION ALL + SELECT success_date AS date, 'succeeded' AS state FROM Succeeded + WHERE success_date BETWEEN '2019-01-01' AND '2019-12-31' +), +date_with_rank AS ( + SELECT + date, + state, + ROW_NUMBER() OVER (PARTITION BY state ORDER BY date) AS rk + FROM all_dates +), +grouped AS ( + SELECT + date, + state, + DATE_SUB(date, INTERVAL rk DAY) AS group_id + FROM date_with_rank +) +SELECT + state AS period_state, + MIN(date) AS start_date, + MAX(date) AS end_date +FROM grouped +GROUP BY state, group_id +ORDER BY start_date; diff --git a/problem2.sql b/problem2.sql new file mode 100644 index 0000000..a12beed --- /dev/null +++ b/problem2.sql @@ -0,0 +1,9 @@ +select min(America) as America, min(Asia) as Asia, min(Europe) as Europe from +(select +case when continent= "America" then name else null end as "America", +case when continent = "Asia" then name else null end as "Asia", +case when continent = "Europe" then name end as "Europe", +row_number() over (partition by continent order by name) as rnk +from student +) t1 +group by rnk \ No newline at end of file diff --git a/problem3.sql b/problem3.sql new file mode 100644 index 0000000..dd3e722 --- /dev/null +++ b/problem3.sql @@ -0,0 +1,20 @@ +WITH stats AS ( + SELECT + DATE_FORMAT(s.pay_date, '%Y-%m') AS pay_month, + e.department_id, + AVG(s.amount) OVER (PARTITION BY DATE_FORMAT(s.pay_date, '%Y-%m')) AS company_avg, + AVG(s.amount) OVER (PARTITION BY DATE_FORMAT(s.pay_date, '%Y-%m'), e.department_id) AS dept_avg + FROM Salary s + JOIN Employee e ON s.employee_id = e.employee_id +) +SELECT + pay_month, + department_id, + CASE + WHEN dept_avg > company_avg THEN 'higher' + WHEN dept_avg < company_avg THEN 'lower' + ELSE 'same' + END AS comparison +FROM stats +GROUP BY pay_month, department_id, dept_avg, company_avg +ORDER BY pay_month, department_id; diff --git a/problem4.sql b/problem4.sql new file mode 100644 index 0000000..6a6b890 --- /dev/null +++ b/problem4.sql @@ -0,0 +1,18 @@ +# Write your MySQL query statement below +-- select player_id,event_date as first_login +-- from ( +-- select player_id,event_date, +-- rank() over (partition by player_id order by event_date) as second_login +-- from Activity ) t +-- where second_login=1; + +-- select distinct(player_id), min(event_date) over(partition by player_id) as 'first_login' +-- from activity; + +-- select player_id,min(event_date) as 'first_login' +-- from activity +-- group by player_id; + +select distinct(player_id), first_value(event_date) over(partition by player_id order by event_date) as 'first_login' +from activity; +