📍이 문제푸는 방법은?
이 문제는 1. 가장 많이 영화를 평가하는 사용자의 이름
2.가장 높은 평균 평점을 가진 영화이름
-> 이 2가지를 찾는 문제이다.
💬어떤 점이 어려웠는지?
중간에 오류가 있었다. chat gpt 을 통해서 어떤 오류가 있었는지
도움을 받았는데, 바로 나는 2. 가장 높은 평균 평점 가진 영화이름이
1의 사용자 이름을 바탕으로 구해야하는 줄 알고, where 서브쿼리 절에
조건으로 추가했었다는 것이다..
1과 2는 엄연히 다른 것이니 조인하지 말고 따로 구하길 바란다!
💭어떻게 풀었는지?
step1 조인
step2.group by having 절로 상위 1개 구하기
💭이때 동점자 발생할 수 있으므로 having 에 조건 2개 넣기
ex: order by a_col desc, b_col asc limit 1;



with
cte_1 as(select b.movie_id, b.user_id, rating, created_at ,title, name
from Movies a join MovieRating b
on a.movie_id= b.movie_id
join Users c
on b.user_id = c.user_id),
cte_2 as (
select name
from cte_1
group by user_id
order by count(movie_id) desc , name asc limit 1
),
cte_3 as (
select title
from cte_1
where created_at like '2020-02%'
group by title
order by avg(rating) desc, title asc limit 1
)
select name as results from cte_2
union all
select title as results from cte_3;
📍이 문제푸는 방법은?
- 위치가 겹치지 않고 & 2015년의 값이 겹쳐야한다는 두가지 조건을 만족시키는
tiv_2016을 구하면 되었었음.
💬어떻게 풀었는지?
테이블 2개 생성하고 원본데이터에 2개 값을 join하였다.
1) 2015년 데이터 겹치는 행 출력
2) 위,경도 데이터 겹치지 않는 행 출력


-- 2016년 모든 보험 계약자에 대한 총 투자 가지츠이 합계를 보고하는 솔루션을 작성하기
-- 1. 2015년 중복 , 위치 중복 x
-- 소수점 둘째자리까지 반올림
-- select tiv_2015 from Insurance group by tiv_2015 having count()>=2
-- select lat,lon from Insurance group by lat, lon having count()=1;
with
cte_1 as (select tiv_2015 from Insurance group by tiv_2015 having count()>=2),
cte_2 as (select lat,lon from Insurance group by lat, lon having count()=1)
select round(sum(tiv_2016),2) as tiv_2016 from Insurance a
join cte_1 b on a.tiv_2015 = b.tiv_2015
join cte_2 c on a.lat = c.lat and a.lon = c.lon ;
📍이 문제푸는 방법은?
- 위치가 겹치지 않고 & 2015년의 값이 겹쳐야한다는 두가지 조건을 만족시키는
tiv_2016을 구하면 되었었음.
💬어떻게 풀었는지?
테이블 2개 생성하고 원본데이터에 2개 값을 join하였다.
1) 2015년 데이터 겹치는 행 출력
2) 위,경도 데이터 겹치지 않는 행 출력
두번째로 급여가 큰 사람의 salary값을 구하면 되는거였고
salary중복되지 않도록 값구하면된다.
->이때 counting이 1이하로 떨어지면 null값을 출력하도록 한다.
💭어려웠던 건?
💥1) 상위 2번째 값 구하기
: offset 을 활용하면 된다.
order by limit 20 offset 5; -- 5번째 행부터 20개의 값 출력하기
order by limit 1 offset 0 ; 처음부터 1건의 데이터 출력하기
IF 5번째 큰 값 출력하기
order by col desc limit 1 offset4 : 5번째 큰 값 , 1건 데이터 출력하기
💥2) 빈칸 값이 null로 나오게 하기 위해서...
: distinct 와 ifnull을 활용하였음
💥3) select 구문 서브쿼리 활용하기
: 서브쿼리 활용할 때 이상하게 from 절을 꼭 써야한다고 생각할 떄가 있는데
select 절에 서브쿼리를 넣는다면 그럴필요가 없다
why? 애초에 select 절에 데이터가 있기 때문이다.
then ? select ( select ~ from ~ ) as new_name
이렇게만 해도 괜찮다.


with
cte_1 as (select tiv_2015 from Insurance group by tiv_2015 having count()>=2),
cte_2 as (select lat,lon from Insurance group by lat, lon having count()=1)
select round(sum(tiv_2016),2) as tiv_2016 from Insurance a
join cte_1 b on a.tiv_2015 = b.tiv_2015
join cte_2 c on a.lat = c.lat and a.lon = c.lon ;
💦💦그 외 못 푼 문제...1321번!
꼭 풀어볼거다..