inflearn logo
강의

Course

Instructor

[A hundred words are not as good as seeing once] Advanced SQL for data analysis

Subquery

count(*)과 AS가 사용가능한절 TOP EARNERS문제

250

David Lee

20 asked

0

안녕하세요

해당 문제에 대한 반복 수강으로 서브쿼리에 대한 이해가 어느정도 되었는데 문제를 외워서 푼 감도 있어서 몇 가지 여쭤봅니다

 

/*SELECT months*salary AS earnings, count(*)

FROM employee

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

GROUP BY earnings*/

SELECT months*salary AS earnings, count(*)

FROM employee

GROUP BY earnings

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

 

  1. 아래와 같이 쿼리를 짰는데

WHERE절에는 선생님께서 earnings 알리아스로 축약한 것을 사용할 수 없다고 하시더라고요

where절만 특징적으로 그런건가요?

반대로 having절에서는 months*salary로는 값이 안나오고 earnings로 했을 때는 정답이 출력되어서요

as가 어느절에서는 적용이 되고 안되는지 명확한 이해가 필요할 거 같습니다.

 

  1. 마지막에 select count(*)을 해서 최대 임금을 가진 그룹바이로 엮은 값의 수를 구하였는데

    이전 문제들 중 count(*)대신 전체를 셀 때 name이나 id 등으로도 가능했는데 여기서는 기준이

    같은 점수 예를 들어

    108044 jane

    108044 kim

    이런식이어서 이름으로는 묶을 수 없는게 맞을까요?

    count(*)의 정의가 명확히 정립이 안된거 같습니다ㅜ

감사합니다.

 

sql

Answer 2

0

jaemin

as가 어느절에서는 적용이 되고 안되는지 명확한 이해가 필요할 거 같습니다.

위 질문에 대한 추가 답변 드립니다.

쿼리는 아래와 같은 순서로 실행되고 기본적으로 앞 순서에서 준 별칭을 뒷 순서에서 사용 가능합니다.

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT

그런데 MySQL에서 GROUP BY와 HAVING에서 SELECT 절의 별칭을 사용할 수 있는 기능을 제공하므로 이 부분은 예외적입니다. 

0

communityai8509

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

쿼리에서 AS는 SELECT 절에서 사용되어 컬럼의 별칭을 지정해주는 역할을 해요. 하지만 WHERE 절에서는 AS로 지정한 별칭을 사용할 수 없어요. WHERE 절은 데이터를 추출하기 위한 조건을 지정하는데, 별칭은 데이터 추출 이후에 부여되기 때문입니다.

HAVING 절은 GROUP BY 절 이후의 결과를 필터링하는데 사용됩니다. AS로 지정한 별칭은 GROUP BY 절에서 이미 정의되었기 때문에 HAVING 절에서는 사용할 수 있어요.

최대 임금을 가진 그룹을 구할 때, 동일한 값이 여러 개 존재할 수 있기 때문에 count() 대신 별도의 기준으로 그룹화를 해야합니다. 예를 들어 이름으로 그룹을 지을 수 있고, 같은 이름을 가진 사람들을 한 그룹으로 묶을 수 있어요. 따라서 count() 대신 name이나 id 등을 사용할 수 있습니다.

count()는 결과 집합의 행 수를 계산하는데 사용되며, 이는 특정 그룹으로 묶지 않고 전체를 대상으로 계산됩니다. 그래서 모든 행을 대상으로 count()를 사용하는 경우, 모든 행의 수가 반환됩니다.

추가로 count(*)는 특정 열에 NULL 값이 포함되어 있는 경우, NULL 값을 제외하고 count합니다. 이 점에 유의하셔서 사용하시면 됩니다.

더 궁금한 사항이 있다면 언제든지 물어보세요!

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

0

84

1

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

0

57

2

서브쿼리 질문

0

59

2

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

0

72

1

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

0

66

1

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

0

66

2

Top Earners 문제관련 질문

0

95

2

고급반 cheetsheet

0

145

2

196. Delete Duplicate Emails 좋은 코드 질문

0

140

1

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

0

125

0

강의 플랫폼

0

197

3

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

0

203

2

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

0

249

1

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

0

355

2

사용자정의함수

0

230

1

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

0

294

1

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

0

259

1

196. subquery로 풀 때, 궁금한 점

0

382

2

쿼리성능 질문드립니다.

0

311

1

리트코드 highest department salary 문제

0

257

2

The report 문제 order by부분 질문

0

268

2

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

0

418

1

DEPARTMENT HIGHEST SALARY 서브쿼리 문제 문의

0

233

1

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

0

281

1