Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions Week3/Solutions/hw2_task1.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
select a.title as album_name
from album as a
join track as t
on a.album_id=t.album_id
where t.milliseconds > 250000
group by a.title;


select a.title as album_name, count(t) as cnt
from album as a
join track as t
on a.album_id = t.album_id
group by a.title;
43 changes: 43 additions & 0 deletions Week3/Solutions/hw2_task10.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
with sum_track as (
select album.title as album_name,album.artist_id, count(t.track_id) as count_t, m_t.name
from album
join track t on album.album_id = t.album_id
join media_type as m_t on t.media_type_id = m_t.media_type_id
--join invoice_line il on t.track_id = il.track_id
group by album.title, album.artist_id, m_t.name
order by album.title
),
q1 as (
select sum_track.album_name, max(sum_track.count_t) as cnt
from sum_track
group by sum_track.album_name
),
q2 as(
select sum_track.artist_id,sum_track.name, count(sum_track.album_name) as c_1
from sum_track
join q1 on sum_track.album_name=q1.album_name
where sum_track.count_t=q1.cnt
group by sum_track.artist_id, sum_track.name
order by sum_track.artist_id, sum_track.name ),
q3 as(
select q2.artist_id, max(q2.c_1) as m_c
from q2
group by q2.artist_id
),
q4 as(
select q2.artist_id, count(q2.name) as all_album
from q2
group by q2.artist_id
order by q2.artist_id
)
,
q5 as (
select a.name as artist_name, q2.name as media_type_name, q3.m_c as media_cnt, q4.all_album aswhole_cnt
from artist as a
join q4 on a.artist_id=q4.artist_id
join q3 on a.artist_id=q3.artist_id
join q2 on q3.artist_id=q2.artist_id
where q2.c_1=q3.m_c
)
select *
from q5;
7 changes: 7 additions & 0 deletions Week3/Solutions/hw2_task2.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
select g.name as general_name, mt.name as media_type, count(t) as cnt
from track as t
join genre as g
on g.genre_id = t.genre_id
join media_type mt
on t.media_type_id = mt.media_type_id
group by g.name, mt.name
10 changes: 10 additions & 0 deletions Week3/Solutions/hw2_task3.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
select concat(emp.first_name,' ', emp.last_name) as employee_full_name, emp.birth_date as employee_birth_date,
emp.hire_date as employee_hire_date, concat(manager.first_name, ' ', manager.last_name) as manager_full_name,
manager.birth_date as manager_birth_date, manager.hire_date as manager_hire_date
from employee as emp
left
join employee as manager
on emp.reports_to = manager.employee_id
where emp.birth_date < manager.birth_date
and emp.hire_date > manager.hire_date;

7 changes: 7 additions & 0 deletions Week3/Solutions/hw2_task4.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
select art.name as artist_name, count(tr) as qty
from track as tr
join genre g on tr.genre_id = g.genre_id
join album a on tr.album_id = a.album_id
join artist art on a.artist_id = art.artist_id
where g.name in ('Rock', 'Metal')
group by art.artist_id
9 changes: 9 additions & 0 deletions Week3/Solutions/hw2_task5.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
select concat(emp.first_name,' ', emp.last_name) as employee_full_name, count(distinct i) as invoices_count,
count(distinct c) customers_count, count(distinct i.billing_address) as addresses_count,
count(i_l.track_id) as tracks_count
from employee as emp
join customer c on emp.employee_id = c.support_rep_id
join invoice as i on c.customer_id = i.customer_id
join invoice_line i_l on i.invoice_id = i_l.invoice_id
group by emp.employee_id;

30 changes: 30 additions & 0 deletions Week3/Solutions/hw2_task6.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
-- select c.last_name
-- from customer as c
-- order by length(c.last_name)-length(replace(lower(c.last_name),'a', ''));
-- -- select *
-- -- from customer;
--
--
-- select length(c.last_name)-length(replace(lower(c.last_name),'a', '')) as s
-- from customer as c
-- group by s
-- order by s;

select CASE
when length(c.last_name)-length(replace(lower(c.last_name),'a', '')) = 0
then 'A'
when length(c.last_name)-length(replace(lower(c.last_name),'a', '')) = 1
then 'B'
when length(c.last_name)-length(replace(lower(c.last_name),'a', '')) = 2
then 'C'
else 'D'
END segment_group, count(distinct mt)
from customer as c
join invoice i on c.customer_id = i.customer_id
join invoice_line i_C on i.invoice_id = i_c.invoice_id
join track t on i_C.track_id = t.track_id
join media_type mt on t.media_type_id = mt.media_type_id
join genre g on g.genre_id = t.genre_id
where g.name in ('Metal', 'Heavy Metal')
group by segment_group
order by segment_group;
44 changes: 44 additions & 0 deletions Week3/Solutions/hw2_task7.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
--Жанр - компания - песня - кол-во покупок
with gen_comp_track as(
select g.name, c.company, t.name as t_name, il.quantity
from genre as g
join track t on g.genre_id = t.genre_id
join invoice_line il on t.track_id = il.track_id
join invoice i on i.invoice_id = il.invoice_id
join customer c on c.customer_id = i.customer_id
where c.company is not null
group by g.name, c.company, t.name, il.quantity
order by g.name, c.company, il.quantity
)
--Жанр и количество покупок одной компанией
,
q2 as(
select gen_comp_track.name, gen_comp_track.company, count(company) as count
from gen_comp_track
group by gen_comp_track.name, gen_comp_track.company
order by gen_comp_track.name

)
-- жанр - максмальная покупка
,
q3 as(
select q2.name, max(count) as max_count
from q2
group by q2.name
order by q2.name

)
-- жанр - компания, которая больше купила этот жанр(соеденияем q2 и q3)
,
q4 as(
select distinct on(q3.name) q3.name, q2.company, gen_comp_track.t_name,q3.max_count
from q2
join gen_comp_track on q2.name=gen_comp_track.name
join q3 on q3.name = q2.name
where q2.count = q3.max_count

)

select q4.company as company_name, q4.t_name as track_name
from q4;

56 changes: 56 additions & 0 deletions Week3/Solutions/hw2_task8.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@

-- в выборе убираются песни, которые не были куплены ни разу
--жанры - трек - кол-во покупок
with popular as (
select g.name as g_name, t.name as t_name, sum(il.quantity) as quan
from genre as g
join track t on g.genre_id = t.genre_id
join invoice_line il on t.track_id = il.track_id
group by g.name, il.quantity, t.name
order by g.name,il.quantity, t.name
),
-- жанр - кол-во песен, которые покупали более одного раза
q1 as (
select popular.g_name as name, count(popular.quan) as cnt
from popular
group by popular.g_name
-- жанр-трек-процент покупки песни от q1
),
q2 as(
select popular.g_name, popular.t_name,
round((popular.quan::numeric/q1.cnt::numeric)*100, 2) as round_q2
from popular
join q1 on q1.name=popular.g_name
order by popular.g_name, round_q2 desc , popular.t_name

),
-- q2 и индексация
q3 as(
select *, rank() over(partition by q2.g_name order by q2.round_q2 desc, q2.t_name) as indc
from q2
order by q2.g_name, q2.round_q2 desc , q2.t_name
),
-- жанр-трек-процент с учетом предыдущего
q4 as (
select q3_s.g_name, q3_s.t_name, sum(q3_f.round_q2) as percent
from q3 as q3_f
join q3 as q3_s on q3_f.g_name=q3_s.g_name
and q3_f.indc <= q3_s.indc
group by q3_s.g_name, q3_s.t_name, q3_s.indc
order by q3_s.g_name, q3_s.indc
),
-- q4 только треки, входящие в 25% популярных
q5 as(
select q4.g_name,q4.t_name
from q4
where q4.percent <= 25
)
-- конечный вывод
select q5.t_name as track_name, q2.round_q2 as popularity
from q5
join q2 on q5.g_name=q2.g_name and q5.t_name=q2.t_name





21 changes: 21 additions & 0 deletions Week3/Solutions/hw2_task9.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@

-- Подсчет суммы миллисекунд одинакого жанра
with sum_track as (
select album.title as album_name, sum(t.milliseconds) as track_mil,sum(il.quantity) as track_buy, g.name as genre_name
from album
join track t on album.album_id = t.album_id
join genre g on t.genre_id = g.genre_id
join invoice_line il on t.track_id = il.track_id
group by album.title, g.name
order by album.title
),
q1 as (
select sum_track.album_name, max(sum_track.track_mil) as cnt
from sum_track
group by sum_track.album_name
)
select q1.album_name, sum_track.genre_name, q1.cnt
from q1
join sum_track on sum_track.album_name=q1.album_name
where q1.cnt = sum_track.track_mil
group by q1.album_name, sum_track.genre_name, q1.cnt;