https://www.youtube.com/watch?v=kJc1aK00vwg&list=PLavw5C92dz9Hxz0YhttDniNgKejQlPoAn&index=20
-- Find the median ages of countries
drop table if exists people;
create table people
(
id int,
country varchar(20),
age int
);
insert into people values(1 ,'Poland',10 );
insert into people values(2 ,'Poland',5 );
insert into people values(3 ,'Poland',34 );
insert into people values(4 ,'Poland',56);
insert into people values(5 ,'Poland',45 );
insert into people values(6 ,'Poland',60 );
insert into people values(7 ,'India',18 );
insert into people values(8 ,'India',15 );
insert into people values(9 ,'India',33 );
insert into people values(10,'India',38 );
insert into people values(11,'India',40 );
insert into people values(12,'India',50 );
insert into people values(13,'USA',20 );
insert into people values(14,'USA',23 );
insert into people values(15,'USA',32 );
insert into people values(16,'USA',54 );
insert into people values(17,'USA',55 );
insert into people values(18,'Japan',65 );
insert into people values(19,'Japan',6 );
insert into people values(20,'Japan',58 );
insert into people values(21,'Germany',54 );
insert into people values(22,'Germany',6 );
insert into people values(23,'Malaysia',44 );
select * from people;
SELECT country,age
FROM (
select *
,ROW_NUMBER() OVER (PARTITION BY country ORDER BY age) AS age_rn,
COUNT(id) OVER (PARTITION BY country ORDER BY age RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS total_people
from people) x
WHERE age_rn >= total_people/2 AND age_rn <= (total_people/2) + 1