반응형
반응형

https://leetcode.com/problems/nth-highest-salary/

 

Nth Highest Salary - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

CASE WHEN 

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
      # Write your MySQL query statement below.
      SELECT CASE WHEN COUNT(*) < N THEN NULL
                  ELSE MIN(SUB.SALARY) END
      FROM (SELECT SALARY
            FROM EMPLOYEE
            ORDER BY SALARY DESC
            LIMIT N) SUB
  );
END

 

LIMIT

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  SET N = N - 1;
  RETURN (
      SELECT DISTINCT SALARY
      FROM EMPLOYEE
      ORDER BY SALARY DESC
      LIMIT N, 1
  );
END
반응형

'IT study > SQL' 카테고리의 다른 글

LeetCode : 185. Department Top Three Salaries  (0) 2021.10.22
Leetcode : 180. Consecutive Numbers  (0) 2021.10.22
HackerRank : The Report  (0) 2021.10.22
HackerRank : Challenges  (0) 2021.10.22
LeetCode : 184. Department Highest Salary  (0) 2021.10.21
반응형

https://leetcode.com/problems/department-top-three-salaries/

 

Department Top Three Salaries - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

 

Window Func

SELECT EMP_INFO.DEPT_NAME AS Department,
       EMP_INFO.EMP_NAME AS Employee, 
       SALARY AS Salary
FROM (SELECT E.NAME AS EMP_NAME, D.NAME AS DEPT_NAME, E.SALARY, 
      DENSE_RANK() OVER(PARTITION BY E.DEPARTMENTID ORDER BY SALARY DESC) AS SAL_RANK
      FROM EMPLOYEE E
      JOIN DEPARTMENT D ON E.DEPARTMENTID = D.ID) EMP_INFO
WHERE EMP_INFO.SAL_RANK <= 3
ORDER BY SALARY
반응형

'IT study > SQL' 카테고리의 다른 글

LeetCode : 177. Nth Highest Salary  (0) 2021.10.22
Leetcode : 180. Consecutive Numbers  (0) 2021.10.22
HackerRank : The Report  (0) 2021.10.22
HackerRank : Challenges  (0) 2021.10.22
LeetCode : 184. Department Highest Salary  (0) 2021.10.21
반응형

https://leetcode.com/problems/consecutive-numbers/

 

Consecutive Numbers - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

Multiple Self JOIN

SELECT L.NUM AS ConsecutiveNums
FROM LOGS L
JOIN LOGS L2 ON L.ID + 1 = L2.ID
JOIN LOGS L3 ON L.ID + 2 = L3.ID
WHERE L.NUM = L2.NUM = L3.NUM

 

Using Window Function

SELECT DISTINCT N1 AS ConsecutiveNums
FROM (
SELECT NUM AS N1, LEAD(1, NUM) OVER(ORDER BY ID) AS N2, LEAD(2, NUM) OVER(ORDER BY ID) AS N3
FROM LOGS)
WHERE N1 = N2= N3
반응형

'IT study > SQL' 카테고리의 다른 글

LeetCode : 177. Nth Highest Salary  (0) 2021.10.22
LeetCode : 185. Department Top Three Salaries  (0) 2021.10.22
HackerRank : The Report  (0) 2021.10.22
HackerRank : Challenges  (0) 2021.10.22
LeetCode : 184. Department Highest Salary  (0) 2021.10.21
반응형

https://www.hackerrank.com/challenges/the-report/problem?h_r=internal-search&isFullScreen=true 

 

The Report | HackerRank

Write a query to generate a report containing three columns: Name, Grade and Mark.

www.hackerrank.com

 

JOIN ON BETWEEN

join 절에 다음과 같이 between을 사용 할 수 있다.

 

SELECT IF(G.GRADE >= 8, S.NAME, NULL), G.GRADE, S.MARKS
FROM STUDENTS S
JOIN GRADES G ON S.MARKS BETWEEN G.MIN_MARK AND G.MAX_MARK
ORDER BY G.GRADE DESC, S.NAME
반응형

'IT study > SQL' 카테고리의 다른 글

LeetCode : 185. Department Top Three Salaries  (0) 2021.10.22
Leetcode : 180. Consecutive Numbers  (0) 2021.10.22
HackerRank : Challenges  (0) 2021.10.22
LeetCode : 184. Department Highest Salary  (0) 2021.10.21
Challenges  (0) 2021.05.02
반응형

https://www.hackerrank.com/challenges/challenges/problem?h_r=internal-search&isFullScreen=true 

 

Challenges | HackerRank

Print the total number of challenges created by hackers.

www.hackerrank.com

 

Sub Query

SELECT H.HACKER_ID, MAX(H.NAME), COUNT(C.CHALLENGE_ID) AS NUM_OF_CHALLENGES
FROM HACKERS H
JOIN CHALLENGES C ON H.HACKER_ID = C.HACKER_ID
GROUP BY H.HACKER_ID
HAVING NUM_OF_CHALLENGES = (SELECT MAX(SUB.NUM_OF_CHALLENGES)
                            FROM (SELECT COUNT(CHALLENGE_ID) AS NUM_OF_CHALLENGES  
                                  FROM CHALLENGES
                                  GROUP BY HACKER_ID) SUB)
OR NUM_OF_CHALLENGES IN (SELECT SUB.NUM_OF_CHALLENGES
                         FROM (SELECT HACKER_ID, COUNT(*) AS NUM_OF_CHALLENGES
                               FROM CHALLENGES
                               GROUP BY HACKER_ID) SUB
                         GROUP BY SUB.NUM_OF_CHALLENGES
                         HAVING COUNT(*) = 1)
ORDER BY NUM_OF_CHALLENGES DESC, H.HACKER_ID

 

여러번 쓰이는 SUB QUERY는 WITH 문으로 미리 테이블을 정의하여 재사용하면

코드를 간략화 할 수 있다.

WITH CHALLENGES_COUNT AS(
SELECT COUNT(CHALLENGE_ID) AS NUM_OF_CHALLENGES  
FROM CHALLENGES
GROUP BY HACKER_ID)

SELECT H.HACKER_ID, MAX(H.NAME), COUNT(C.CHALLENGE_ID) AS NUM_OF_CHALLENGES
FROM HACKERS H
JOIN CHALLENGES C ON H.HACKER_ID = C.HACKER_ID
GROUP BY H.HACKER_ID
HAVING NUM_OF_CHALLENGES = (SELECT MAX(SUB.NUM_OF_CHALLENGES)
                            FROM CHALLENGES_COUNT SUB)
OR NUM_OF_CHALLENGES IN (SELECT SUB.NUM_OF_CHALLENGES
                         FROM CHALLENGES_COUNT SUB
                         GROUP BY SUB.NUM_OF_CHALLENGES
                         HAVING COUNT(*) = 1)
ORDER BY NUM_OF_CHALLENGES DESC, H.HACKER_ID
반응형

'IT study > SQL' 카테고리의 다른 글

Leetcode : 180. Consecutive Numbers  (0) 2021.10.22
HackerRank : The Report  (0) 2021.10.22
LeetCode : 184. Department Highest Salary  (0) 2021.10.21
Challenges  (0) 2021.05.02
Ollivander's Inventory  (0) 2021.05.01
반응형

https://leetcode.com/problems/department-highest-salary/

 

Department Highest Salary - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

FROM절 서브쿼리, JOIN

 

SELECT D.NAME AS DEPARTMENT,
        E.NAME AS EMPLOYEE,
        E.SALARY AS SALARY
FROM EMPLOYEE E
JOIN (SELECT DEPARTMENTID, MAX(SALARY) AS MX_SAL
FROM EMPLOYEE
GROUP BY DEPARTMENTID) SUB ON E.SALARY = SUB.MX_SAL 
                            AND E.DEPARTMENTID = SUB.DEPARTMENTID
JOIN DEPARTMENT D ON E.DEPARTMENTID = D.ID

 

Window Func

SELECT EMP_INFO.DEPT_NAME AS Department,
       EMP_INFO.EMP_NAME AS Employee,
       EMP_INFO.SALARY AS Salary
FROM (
    SELECT E.NAME AS EMP_NAME, 
           D.NAME AS DEPT_NAME, 
           E.SALARY,
           MAX(SALARY) OVER(PARTITION BY DEPARTMENTID) AS MAX_SAL
    FROM EMPLOYEE E
    JOIN DEPARTMENT D ON E.DEPARTMENTID = D.ID) EMP_INFO
WHERE EMP_INFO.SALARY = EMP_INFO.MAX_SAL
반응형

'IT study > SQL' 카테고리의 다른 글

HackerRank : The Report  (0) 2021.10.22
HackerRank : Challenges  (0) 2021.10.22
Challenges  (0) 2021.05.02
Ollivander's Inventory  (0) 2021.05.01
Top Competitors  (0) 2021.04.26

+ Recent posts