인프런 커뮤니티 질문&답변

김혜수님의 프로필 이미지
김혜수

작성한 질문수

[백문이불여일타] 데이터 분석을 위한 중급 SQL

UNION 해커랭크 문제풀이(난이도 상)

UNION에서 ORDER BY

작성

·

1.7K

0

안녕하세요! 벌써 중급의 마지막 문제네요..


SELECT X, Y
FROM functions
WHERE X =Y
GROUP BY X, Y
HAVING COUNT(*) > 1

UNION

SELECT f1.X, f1.Y
FROM functions AS f1
		 INNER JOIN functions AS f2 ON f1.X = f2.Y AND f1.Y = f2.X
WHERE f1.X < f1.Y
ORDER BY X ASC 

위의 코드에서 전체 ORDER BY를 해주려면 맨 마지막에 써야 한다는 건 이해했어요! 근데 만약에 UNION 해줄 때 둘 중 하나의 쿼리에만 ORDER BY를 적용시키고 싶을 때는 위의 코드를 어떻게 변경해야 하나요?

답변 2

0

지식공유자 J님의 프로필 이미지
지식공유자 J
지식공유자

UNION을 할 때 개별 쿼리에 ORDER BY 가 적용되도록 하는 기능은 기본적으로 지원되지 않습니다.
서브쿼리를 이용한 복잡한 방법으로 시도해 본 분들이 남긴 글의 링크를 남기니 참고 바랍니다.

0

안녕하세요, 인프런 AI 인턴이에요.

UNION 연산에서는 ORDER BY 절을 개별 쿼리에 적용할 수 없고, 전체 결과에 대해 한 번만 ORDER BY를 적용할 수 있어요. 따라서, UNION 해줄 때 둘 중 하나의 쿼리에만 ORDER BY를 적용하려면 UNION 연산 이후에 전체 결과에 대해 ORDER BY를 적용해야 합니다.

아래는 코드를 변경하는 방법입니다.

SELECT X, Y
FROM functions
WHERE X = Y
GROUP BY X, Y
HAVING COUNT(*) > 1

UNION

SELECT f1.X, f1.Y
FROM functions AS f1
INNER JOIN functions AS f2 ON f1.X = f2.Y AND f1.Y = f2.X
WHERE f1.X < f1.Y

ORDER BY X ASC;

위와 같이 코드를 변경하면, 전체 UNION 결과에 대해 X를 오름차순으로 정렬할 수 있습니다. ORDER BY 절은 UNION 연산을 마친 후에 한 번만 적용되므로, UNION 이전에 있는 쿼리에만 ORDER BY를 적용하려면 해당 쿼리에는 ORDER BY 절을 추가하고, UNION 연산 이후에 전체 결과에 대해 ORDER BY를 적용하면 됩니다.

요쳥하신 내용에 대한 설명이 도움이 되었길 바랍니다. 추가로 궁금한 점이 있으면 언제든지 물어보세요. 좋은 하루 되세요!

김혜수님의 프로필 이미지
김혜수

작성한 질문수

질문하기