반응형
Notice
Recent Posts
Recent Comments
Link
개발은 처음이라 개발새발
MySQL Union 퀴즈 [해커랭크] 본문
반응형
https://www.hackerrank.com/challenges/symmetric-pairs/problem?h_r=internal-search
문제를 살펴보면 두가지 경우의 해당하는 x,y를 찾아야 합니다. 첫번째는 x와 y가 같은 로우가 2개이상일 때, 두번째는 x와 y가 교차로 다른 로우와 같을 때 y가 큰 쪽을 찾아야 합니다. 이렇게 서로 다른 조건을 가로로 붙이지 않고 세로로 붙일 때 UNION 함수를 사용합니다. 그렇다면 첫번째 조건부터 쿼리를 작성해보겠습니다. 첫번째 조건에서 중요한 것은 x,y가 서로 같은 경우가 중복일 때를 찾는 것입니다. 그렇기에 group by를 사용해서 x,y가 같은 것이 몇개인지 개수를 세어봐야 합니다.
##x,y가 같은 로우들
select x,y,count(*)
from functions
where x=y
group by x,y
_______________________________________
output:
35 35 1
8 8 1
92 92 1
67 67 1
62 62 1
33 33 1
13 13 2
###x,y가 같은 게 2개 이상
select x,y
from functions
where x=y
group by x,y
having count(*) = 2
_______________________________________
output:
13 13
이제 두번째 조건을 풀어보겠습니다. 두번째 조건은 서로 교차해서 같은 x,y를 찾아야 하니 self join을 적용해서 비교해봐야 합니다.
select f1.x, f1.y
from functions as f1
join functions as f2
on f1.x = f2.y and f1.y = f2.x
where f1.x < f1.y
___________________________________
output:
8 18
11 15
9 17
2 24
6 20
4 22
5 21
네, 이렇게 두번째 조건도 만들었으니 이제 이 두개를 UNION으로 합쳐야 합니다. 그러면 최종 결과를 확인해보겠습니다.
select x,y
from functions
where x=y
group by x,y
having count(*) = 2
union
select f1.x, f1.y
from functions as f1
join functions as f2
on f1.x = f2.y and f1.y = f2.x
where f1.x < f1.y
order by x
_____________________________________
output:
2 24
4 22
5 21
6 20
8 18
9 17
11 15
13 13
반응형
'mysql' 카테고리의 다른 글
UPDATE 와 CASE를 활용한 퀴즈[LeetCode] (0) | 2023.05.29 |
---|---|
INSERT, UPDATE, DELETE 간단 정리 (0) | 2023.05.27 |
MySQL DATE_ADD & Self Join 퀴즈2 [LeetCode] (0) | 2023.05.09 |
Self Join 퀴즈 풀어보기 [LeetCode] (0) | 2023.05.07 |
Left Join 퀴즈 풀어보기 [LeetCode] (3) | 2023.05.06 |