inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

사용자정의함수 리트코드 문제풀이 1

Dense_rank를 활용한 풀이법 문의

373

[SQL 실전반 7기] 곤

작성한 질문수 3

0

안녕하세요~ 177번 문제를 dense_rank를 활용해 풀어보고 싶어서 아래와 같이 코드를 작성했는데요. 오류와 함께 정답처리되지 않습니다. 어떤 부분이 잘못되었는지 알려주시면 감사하겠습니다! (MySQL ver)
 
▼코드
CREATE FUNCTION getNthHighestSalary(N INT) 
RETURNS INT
BEGIN
    RETURN (
            SELECT CASE WHEN sub.rank = N THEN sub.salary 
                        ELSE NULL
                   END AS getNthHighestSalary(N)
            FROM(
                SELECT id
                     , salary
                     , DENSE_RANK() OVER (ORDER BY salary DESC) AS rank
                FROM Employee
                ) sub
        
    );
END
 
▼오류내용
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 
RETURNS INT
BEGIN
    RETURN (
            SELECT CASE WHEN sub.rank ' at line 17

sql

답변 1

0

지식공유자 J

alias로 'rank'라는 이름을 붙이셨는데, rank는 SQL에서 예약어로 쓰이고 있어서 해당 오류가 나는 것으로 보입니다.  'rnk' 등 다른 이름으로 수정해 주세요.

그리고 SELECT 절에서 지금과 같이 CASE 문으로 작성하면, 
모든 row의 rnk를 N과 비교하면서 비교 결과에 따라  salary 또는 null을 출력하기 때문에 row 수 만큼의 답이 나옵니다.

그러므로 WHERE 절에서 비교를 하고, 이에 해당하는 값만 중복 없이 가져오도록 작성해 주셔야 합니다.

아래 쿼리 참고 바랍니다. 

CREATE FUNCTION getNthHighestSalary(N INT) 
RETURNS INT
BEGIN
    RETURN (
            SELECT DISTINCT salary
            FROM(
                SELECT id
                     , salary
                     , DENSE_RANK() OVER (ORDER BY salary DESC) AS rnk
                FROM Employee
            ) sub
            WHERE rnk = N
    );
END

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

0

100

1

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

0

74

2

서브쿼리 질문

0

76

2

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

0

85

1

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

0

86

1

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

0

73

2

Top Earners 문제관련 질문

0

103

2

고급반 cheetsheet

0

168

2

196. Delete Duplicate Emails 좋은 코드 질문

0

148

1

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

0

134

0

강의 플랫폼

0

205

3

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

0

214

2

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

0

260

1

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

0

369

2

사용자정의함수

0

234

1

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

0

303

1

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

0

266

1

196. subquery로 풀 때, 궁금한 점

0

392

2

쿼리성능 질문드립니다.

0

321

1

리트코드 highest department salary 문제

0

265

2

The report 문제 order by부분 질문

0

276

2

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

0

428

1

DEPARTMENT HIGHEST SALARY 서브쿼리 문제 문의

0

243

1

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

0

292

1