inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

UNION 해커랭크 문제풀이 질문

339

뎁꼼

작성한 질문수 27

3

Symmetric Pairs에서

UNION 후 마지막에 ORDER BY X를 해주는데,

ORDER BY Functions.X로 하면 에러가 나는 이유는 무엇인가요?

제가 작성 한 SQL은 아래와 같습니다

SELECT Functions.X
     , Functions.Y
FROM Functions
WHERE Functions.X = Functions.Y
GROUP BY Functions.X, Functions.Y
HAVING COUNT(*) = 2

UNION

SELECT Functions.X
     , Functions.Y
FROM Functions
    INNER JOIN Functions as CompareT ON Functions.X = CompareT.Y AND Functions.Y = CompareT.X
WHERE Functions.X < Functions.Y
GROUP BY Functions.X, Functions.Y
ORDER BY Functions.X

sql

답변 2

3

이보민

안녕하세요 으아니동동님

마지막 줄에 사용하신 ORDER BY는 UNION으로 합쳐진 테이블에 적용되는 명령어입니다. UNION을 이용하여 새롭게 만들어진 테이블은 Functions와 별개의 테이블이기 때문에 Fucntions 를 붙여주시면 에러가 납니다.

아래 쿼리 참고해주세요.

(SELECT Functions.X
     , Functions.Y
FROM Functions
WHERE Functions.X = Functions.Y
GROUP BY Functions.X, Functions.Y
HAVING COUNT(*) = 2

UNION

SELECT Functions.X
     , Functions.Y
FROM Functions
    INNER JOIN Functions as CompareT ON Functions.X = CompareT.Y AND Functions.Y = CompareT.X
WHERE Functions.X < Functions.Y
GROUP BY Functions.X, Functions.Y)

ORDER BY X

UNION으로 합쳐진 테이블에 별칭을 붙이고 싶으실 경우 아래 쿼리를 참고해주시면 됩니다.
이 경우에는 union_table이라는 별칭을 사용하여 ORDER BY에서 테이블 조회가 가능합니다.

(SELECT Functions.X
     , Functions.Y
FROM Functions
WHERE Functions.X = Functions.Y
GROUP BY Functions.X, Functions.Y
HAVING COUNT(*) = 2

UNION

SELECT Functions.X
     , Functions.Y
FROM Functions
    INNER JOIN Functions as CompareT ON Functions.X = CompareT.Y AND Functions.Y = CompareT.X
WHERE Functions.X < Functions.Y
GROUP BY Functions.X, Functions.Y) AS union_table

ORDER BY union_table.X

궁금증이 해결되셨길 바랍니다.

감사합니다.

0

[SQL 입문반 16기] 박원복

저도 동일한 질문인데 궁금증이 아직 해소되지 않아 여기에 댓글로 남깁니다! UNION으로 합쳐져 새롭게 만들어진 테이블에 ORDER BY가 적용된다고 하셨는데, 그럼 새롭게 만들어진 테이블의 컬럼이 X, Y로 되어있는걸까요? 컬럼명이 표기되지 않아 결과값을 모르겠는데 컬럼명이 X,Y로 자동으로 된걸까요? SELECT 이후에 별도 별칭을 하지 않아 1번째 테이블은 X, Y로 컬럼명이 되지만 2번째 테이블은 f1.x, f1.y 으로 된 것 아닌가요?

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
     INNER JOIN functions AS f2 ON f1.X = f2.Y AND f1.y = f2.X
WHERE f1.x < f1.y
ORDER BY X

리트코드 1280. Students and Examinations

0

74

3

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

0

89

2

African Cities 문제관련 질문

0

53

1

SQL 코딩테스트 질문

0

206

1

HACKER RANK에서 문제찾기

0

96

2

강의 자료 다운로드

0

90

2

Asian population 문제가 없어요

0

76

2

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

0

65

2

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

0

78

2

rising temperature 문제 질문

0

98

2

해커랭크 TOP EARNERS 문제 질문

0

98

1

ON 뒤에 질문

0

94

2

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

0

196

3

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

1

203

2

CustomerID가 중복되서 나타나요

0

232

3

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

0

142

2

CASE WHEN 쿼리 오류 문의

1

324

3

CASE문제풀이 질문

0

124

1

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

0

136

1

Average Population 질문

0

129

1

Revising Aggregations - The Count Function 질문

0

103

1

Average Population of Each Continent 에대해서 질문

0

191

3

w3schools 에서 쿼리 작성 질문

0

158

1

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

0

328

1