inflearn logo
강의

Khóa học

Chia sẻ kiến thức

[Một trăm từ đáng giá một ngàn từ] SQL nâng cao để phân tích dữ liệu

Giải bài tập HackerRank về truy vấn con (Subquery)

해커랭크 Top Earners 문제 답답합니다 ㅜㅜ

Đã giải quyết

490

min100ja0776

1 câu hỏi đã được viết

2

변수 명명이 헷깔립니다.

1.

WHERE절에 서브쿼리를 할때

 

SELECT  months*salary , count(*)

FROM Employee

WHERE months*salary = (SELECT MAX(months *salary) FROM Employee)

GROUP BY months*salary

 

이렇게 months*salary를 따로 명명해주지 않아도 잘 돌아갑니다.

그런데 

 

SELECT  months*salary AS earnings, count(*)

FROM Employee

WHERE earnings = (SELECT MAX(months *salary) FROM Employee)

GROUP BY earnings

 

이런식으로 WHERE과 GROUP BY에 earnings라고 명명한 변수를 쓰면 에러가 납니다. 그 이유를 모르겠습니다.

 

 

2. 그런데 HAVING 절에 서브쿼리를 쓰는 경우는 이와 반대가 됩니다.

 

SELECT  months*salary AS earnings, count(*)

FROM Employee

GROUP BY earnings

HAVING earnings = (SELECT MAX(months*salary) FROM Employee)

이렇게 GROUP BY와 HAVING에 earnings라고 명명한 변수를 주면 잘 돌아갑니다.

 

그런데  

 

SELECT  months*salary , count(*)

FROM Employee

GROUP BY months*salary

HAVING months*salary = (SELECT MAX(months*salary) FROM Employee)

 

이렇게 이름을 따로 명명해주지 않으면 안돌아갑니다. 

명명부분이 너무 어렵습니다ㅜㅜ 도와주세요

sql

Câu trả lời 3

0

min100ja0776

구글링했을때 대부분 mysql도 having이 select보다 먼저라고 되어있는데 블로그 글들이 틀린거군요....

답변 감사합니다!

0

min100ja0776

알려주신  사이트보니까 순서가 SELCET전에 HAVING이 작동하는거 같은데 Alias를 HAVING 절에서 어떻게 사용하는거죠?? (해당사진은 링크 걸어주신 마지막 사이트 사진입니다)

0

sdatarian

그 윗 줄을 봐주셔야해요! 도표는 SQL 표준에 대한 이야기고 MySQL 기준은 별도로 설명이 되어 있습니다.

0

sdatarian

안녕하세요, 답변 드립니다.

우선 MySQL 에서는 GROUP BY, HAVING, ORDER BY 절에서 Alias 를 사용하실 수 있고 WHERE 절에서는 사용하실 수 없습니다. WHERE 절에서 사용할 수 없는 이유는 쿼리 실행 순서와 관련이 있는데요, WHERE 절이 실행된 이후에 SELECT 절이 실행되기 때문에 SELECT 절에서 정의한 Alias는 WHERE 절에서 사용할 수 없습니다.

MySQL에서는 SQL 표준 문법과 다르게, HAVING 절이 FROM (JOIN), WHERE, GROUP BY, SELECT 이후에 실행됩니다. 따라서 HAVING 절에서는 SELECT 절에서 정의한 Alias를 사용해주셔야 합니다.

참고 하실 문서를 첨부하였으니 이해에 도움이 되길 바라겠습니다 :)

순위 함수 연습 문제 - 스테디셀러 작가 찾기

0

85

1

문제 내용이 잘못된 것 같습니다.

0

58

2

서브쿼리 질문

0

59

2

[수업질문] 서브쿼리 > null데이터 avg사용 주의

0

72

1

서브쿼리는 언제 작성하는건가요?

0

68

1

안녕하세요 질문드립니다.

0

66

2

Top Earners 문제관련 질문

0

96

2

고급반 cheetsheet

0

149

2

196. Delete Duplicate Emails 좋은 코드 질문

0

141

1

a.id = 1과 b.id=1이 없어도 되는 이유

0

125

0

강의 플랫폼

0

198

3

리트코드 177번 function 풀이중 case when 활용을 위한 서브쿼리 구문을 제출 시 검증에 통과되지 않도록 보강된 듯 하네요

0

205

2

ERD 읽는법에 추가 질문 있어요

0

249

1

lead, lag로 풀이할 시 id 값이 존재하지 않는 경우의 오답

0

356

2

사용자정의함수

0

230

1

이 문제 inner join이 이해가 안됩니다.

0

295

1

평균 함수 사용할 때 주의점과 해결법

0

259

1

196. subquery로 풀 때, 궁금한 점

0

382

2

쿼리성능 질문드립니다.

0

313

1

리트코드 highest department salary 문제

0

258

2

The report 문제 order by부분 질문

0

269

2

리트코드 서브쿼리 문제 질문

0

420

1

DEPARTMENT HIGHEST SALARY 서브쿼리 문제 문의

0

235

1

서브쿼리의 활용사례 및 조인관련질문

0

282

1