inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

HACKER RANK THE REPORT 문제 관련 질문 드립니다.

394

데잇걸즈4기_박유빈

작성한 질문수 10

2

안녕하세요! 저번에 상세한 답변 감사드립니다.

아래 문제 관련 2가지 질문 드립니다.

-문제: HACKER RANK > THE REPORT

1.

-질문: ORDER BY 에서 WITH문을 불러올 수 없는지 궁금합니다.

 with statement를 이 문제에 적용해보려고 시도했습니다.

ORDER BY절에 WITH를 불러와서 써먹고 싶었는데,  오류가 뜨네요.

참고로 문제는 아직 푸는 중입니다.

-오류: 오류 내용은 아래와 같고, ORDER BY를 제외하면 쿼리 에러가 나지 않습니다.

  • ERROR 1370 (42000) at line 1: execute command denied to user '@'localhost' for routine 'counter.COUNT'

-쿼리:

WITH counter AS (SELECT COUNT(name)

                 FROM sub

                 GROUP BY grade)

SELECT (CASE

            WHEN grade < 8 THEN name = "NULL"

            ELSE name

        END) name

        , grade

        , marks

FROM (SELECT *

    FROM students

    LEFT JOIN grades ON students.marks BETWEEN grades.Min_Mark AND grades.Max_Mark

    ) sub

ORDER BY (CASE WHEN counter < 1 THEN marks END) DESC

2.

-질문: JOIN을 활용한 FROM  절에 ALIAS를 넣는게 필수인가요?

아래 쿼리에서 FROM 절 서브 쿼리 뒤에  ALIAS를 넣지 않고 쿼리를 돌리면  오류가 뜹니다.

오류에서 말하는 'derived table'의 의미가 모호한데, 정확히 어떤 뜻인가요?

-오류: "Every derived table must have its own alias"

-쿼리: 

SELECT (CASE

WHEN grade < 8 THEN NULL ELSE name END) name

, grade

, marks

FROM (SELECT * FROM students LEFT JOIN grades ON students.marks BETWEEN grades.Min_Mark AND grades.Max_Mark) sub

답변 달아주시는 분께 미리 감사합니다:)

sql

답변 1

2

송혜정

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

1.
우선, 작성해주신 쿼리에서는 해당 WITH절을 사용하지 않고, SELECT에 적어주신 grade, name, marks를 ORDER BY절에 적절히 적어주시면 올바른 답을 확인하실 수 있습니다. 또한 WITH절에 만들어진 테이블은 FROM 혹은 JOIN절로 불러와 사용하실 수 있으며, counter 테이블을 단독으로 ORDER BY 로 불러와 사용하실 수는 없습니다. 적어주신 쿼리에서 WITH절을 사용하시고자 한다면 FROM절에 적어주신 sub 서브쿼리를 WITH절로 빼서 사용하는 것이 더 나을 것 같습니다.

추가로, 문제에서 출력하라고 한 null은 문자가 아니라 null이라는 속성 입니다. null에 대해 정리된 링크를 첨부하오니 참고해주시면 좋을 것 같네요. [essentialsql.com] What is a Database NULL Value?  CASE 문도 다시 한번 복습 하시면서, CASE문 안에서 null이 출력되는 때는 언제인지, 그렇다면 작성한 쿼리를 어떻게 수정해야 할 지 생각해보시면 좋겠습니다. [w3schools.com] SQL CASE Statement  /  [중급 강의] CASE

2.
이는 쿼리를 실행하는 환경에 따라 Alias 필요 여부가 달라집니다. 다만 쿼리가 길어질 경우, 여러 서브쿼리를 서로 구분하거나 쿼리에 대한 이해를 돕기 위해 Alias를 사용하는 것이 좋습니다. 따라서 Alias는 항상 적는 습관을 들이시는 걸 추천 드립니다.

늦은 답변 양해 부탁 드리며 답변이 도움이 되었길 바랍니다.
추가 질문 있으시면 언제든 남겨주세요 :)

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

0

85

1

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

0

58

2

서브쿼리 질문

0

59

2

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

0

72

1

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

0

67

1

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

0

66

2

Top Earners 문제관련 질문

0

96

2

고급반 cheetsheet

0

146

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

204

2

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

0

249

1

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

0

355

2

사용자정의함수

0

230

1

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

0

295

1

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

0

259

1

196. subquery로 풀 때, 궁금한 점

0

382

2

쿼리성능 질문드립니다.

0

313

1

리트코드 highest department salary 문제

0

257

2

The report 문제 order by부분 질문

0

269

2

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

0

420

1

DEPARTMENT HIGHEST SALARY 서브쿼리 문제 문의

0

235

1

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

0

282

1