4. Find the top 10 most active users on Facebook Messenger
select a.user, sum(msg_count)
from (
select user1 as user, msg_count
from fb_messages
UNION ALL
select user2 as user, msg_count
from fb_messages
)a
group by 1
order by 2 Desc
Limit 10 ;
UNION ALL vs UNION
- UNION ALL 은 duplicates 그대로 추출
- UNION은 duplicates 제거하고 distinct값만 추출 (디폴트)
둘 중 어떤 것을 쓸 지 결정하기 위해 문제에서 중복 제거가 필요한지 체크해야한다.
- 페이스북 메신저 예제에서는
user 1
,user2
가 중복되어도 해당 정보 모두 필요하다. union all
을 쓴 후 aggregate(group by) 한다.
10. Host Popularity Rental Prices
WITH A AS (
SELECT
distinct concat_ws('-', price, room_type, host_since, zipcode, number_of_reviews) as host_id
, CASE WHEN number_of_reviews = 0 then 'New'
WHEN number_of_reviews between 1 and 5 then 'Rising'
WHEN number_of_reviews between 6 and 15 then 'Trending Up'
WHEN number_of_reviews between 16 and 40 then 'Popular'
ELSE 'Hot' END AS host_pop_rating
, price
FROM airbnb_host_searches
)
select host_pop_rating, min(price) min_price, avg(price) avg_price, max(price) max_price
from A
group by 1
WITH CTE AS ( ) SELECT FROM CTE
CONCAT_WS( )
CASE WHEN THEN ELSE END
변수 생성시 자주 사용되는 CASE 문에서 카테고리 대/소문자 확인 잘하기
DISTINCT ≒ GROUP BY
SOLUTION (1)에서는 CTE 2개 생성하여 GROUP BY 를 넣어줬는데, 불필요하게 CTE 중복생성하지 않기
키값이 주어지지 않으면 직접 생성해야하는 케이스도 있다.
'Data Science > Mysql' 카테고리의 다른 글
[LeetCode-HARD] Department Top Three Salaries 부서의 top3 급여 구하기 (0) | 2022.05.03 |
---|---|
[HackerRank] Challenges 문제 코드 (0) | 2021.03.24 |
[MySQL] Advanced Level List (0) | 2021.03.14 |
[HACKERRANK] median 구하기 (0) | 2021.03.10 |
[ Syntax 정리(1) ] LIMIT, OFFSET, Self-Join, JOIN, CAST, LOCATE, POSITION, FUNCTIONS(STRING, DATES, ARRAYS) (0) | 2021.03.04 |