inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

456

얌냠냠

작성한 질문수 8

0

SELECT *
FROM Functions
WHERE x = y
GROUP BY x
HAVING COUNT(x) = 2

UNION

SELECT p1.x, p1.y
FROM Functions AS p1
    INNER JOIN Functions AS p2 ON (p1.x = p2.y AND p2.x = p1.y)
WHERE p1.x < p1.y
ORDER BY x

처음에 ORDER BY p1.x으로 작성했었는데 오류가 나더라고요. UNION 위에 작성한 쿼리를 Alias 없이 작성해서 안 되는 거죠..?

이렇게 Alias가 없는 쿼리와 있는 쿼리를 같이 쓸 때는 ORDER BY 뒤에 Alias를 사용하지 않는 컬럼명을 붙여준다고 생각하면 맞을까요?

sql

답변 1

2

지식공유자 J

두 번째 쿼리의 select 절에서 테이블명(p1)을 붙인 이유는, inner join을 통해 p1과 p2가 합쳐졌는데 두 테이블에 동일한 이름(x, y)을 가진 컬럼이 있기 때문에 그냥 x만 쓰면 p1의 x 컬럼을 가져오라는 건지, p2의 x 컬럼을 가져오라는 건지 구분이 되지 않기 때문입니다.

위치를 정확히 명시해 준 것일 뿐이지, 컬럼 이름 자체가 p1.x 인 것이 아닙니다. 컬럼명은 그냥 x, y입니다.

그리고 union을 통해 첫 번째 쿼리의 output과 합쳐져 x, y 컬럼을 가진 새로운 테이블이 만들어 집니다.
order by는 이 새로운 테이블에 정렬 명령을 하는 것인데, 여기에는 더 이상 p1이라는 테이블이 없으므로 p1.x라고 쓰면 인식하지 못합니다.

 

리트코드 1280. Students and Examinations

0

77

3

16강 LEFT JOIN 리트코드 (183. Customers Who Never Order) 관련 질문

0

90

2

African Cities 문제관련 질문

0

57

1

SQL 코딩테스트 질문

0

211

1

HACKER RANK에서 문제찾기

0

100

2

강의 자료 다운로드

0

91

2

Asian population 문제가 없어요

0

81

2

INNER JOIN 에서 A.키 쓸때 빨간 색 나오고 'dause'

0

70

2

별칭 관련해서 질문 있습니다.

0

81

2

rising temperature 문제 질문

0

99

2

해커랭크 TOP EARNERS 문제 질문

0

102

1

ON 뒤에 질문

0

98

2

INNER JOIN 질문. 강의와 결과값이 다릅니다.

0

201

3

END, 뒤에 * 붙이면 에러가 뜹니다

1

206

2

CustomerID가 중복되서 나타나요

0

236

3

별칭이 전체 테이블을 못 불러와요.

0

145

2

CASE WHEN 쿼리 오류 문의

1

326

3

CASE문제풀이 질문

0

128

1

Customers Who Never Order 풀다가 Alias관련 질문사항

0

139

1

Average Population 질문

0

133

1

Revising Aggregations - The Count Function 질문

0

105

1

Average Population of Each Continent 에대해서 질문

0

194

3

w3schools 에서 쿼리 작성 질문

0

160

1

INNER JOIN 할 때 NULL 값이 안보일 수도 있나요?

0

330

1