3_SQL_Queries
3_SQL_Queries
-- DATASET
create table candidates
(
id int,
gender varchar(1),
age int,
party varchar(20)
);
insert into candidates values(1,'M',55,'Democratic');
insert into candidates values(2,'M',51,'Democratic');
insert into candidates values(3,'F',62,'Democratic');
insert into candidates values(4,'M',60,'Republic');
insert into candidates values(5,'F',61,'Republic');
insert into candidates values(6,'F',58,'Republic');
-- SOLUTION
with cte as
(select *
, rank() over(partition by r.constituency_id order by r.votes desc) as rnk
from candidates c
join results r on r.candidate_id = c.id)
select concat(party, ' ', count(1)) as party_seats_won
from cte
where rnk = 1
group by party
order by count(1) desc;
-- DATASET
drop table if exists customers;
create table customers
(
id int,
first_name varchar(50),
last_name varchar(50)
);
insert into customers values(1, 'Carolyn', 'O''Lunny');
insert into customers values(2, 'Matteo', 'Husthwaite');
insert into customers values(3, 'Melessa', 'Rowesby');
-- DATASET
drop table if exists candidates_tab;
create table candidates_tab
(
id int,
first_name varchar(50),
last_name varchar(50)
);
insert into candidates_tab values(1, 'Davide', 'Kentish');
insert into candidates_tab values(2, 'Thorstein', 'Bridge');
-- SOLUTION
with cte as
(select concat(first_name,' ',last_name) as candidate_name
, state
, count(1) as total
, dense_rank() over(partition by concat(first_name,' ',last_name) order by
count(1) desc) as rnk
from candidates_tab c
join results_tab r on r.candidate_id = c.id
group by candidate_name, state)
select candidate_name
, string_agg(case when rnk = 1 then state||' ('||total||')' end, ', ' order by
state) as "1st_place"
, string_agg(case when rnk = 2 then state||' ('||total||')' end, ', ') as
"2nd_place"
, string_agg(case when rnk = 3 then state||' ('||total||')' end, ', ') as
"3rd_place"
from cte
where rnk <= 3
group by candidate_name