SQL HackerRank 문제 풀이(Advanced Select)

가비·2022년 8월 12일

공부로그

목록 보기
8/14

📌 Type of triangle

case when 문을 써보았다.
CASE
WHEN 조건1 THEN '조건 1 반환 값'
WHEN 조건2 THEN '조건 2 반환 값'
ELSE 'WHEN 조건에 해당 안되는 경우 반환 값'
END

SELECT 
    CASE
        WHEN A + B <= C OR A + C <= B OR B + C <= A  THEN 'Not A Triangle'
        WHEN A = B AND B = C THEN 'Equilateral'
        WHEN A = B OR B = C OR A = C THEN 'Isosceles'
        ELSE 'Scalene'
        END
FROM TRIANGLES;

📌 The PADS

concat 함수를 써보았다. concat함수는 둘 이상의 문자열을 입력한 순서대로 합쳐서 반환해주는 함수이다.
CONCAT(문자열1, 문자열2 [, 문자열3 ...])

SELECT NAME, 
    CASE 
        WHEN Occupation = 'Doctor' THEN '(D)'
        WHEN Occupation = 'Actor' THEN '(A)'
        WHEN Occupation = 'Singer' THEN '(S)'
        WHEN Occupation = 'Professor' THEN '(P)'
    END
FROM OCCUPATIONS;

SELECT concat('There are a total of ', COUNT(Occupation), ' ',Occupation)
FROM OCCUPATIONS
GROUP BY Occupation
ORDER BY COUNT(Occupation),  Occupation;

처음에 이렇게 했었는데,

틀린 결과값이 나왔다.
substr(substring이라고 써도 가능) 함수를 사용하기로 했다.
SUBSTR(str, pos), SUBSTR(str FROM pos)
pos 부터 읽으세요
SUBSTR(str,pos,len), SUBSTR(str FROM pos FOR len)
pos부터 읽고 len 만큼 가져오세요

SELECT concat(NAME,'(',substr(occupation,1,1),')')
FROM OCCUPATIONS
ORDER BY NAME;

SELECT concat('There are a total of ', COUNT(Occupation), ' ',lower(Occupation),'s.')
FROM OCCUPATIONS
GROUP BY Occupation
ORDER BY COUNT(Occupation),  Occupation;

📌 Binary Tree Node

SELECT N,
    CASE
        WHEN P is Null THEN 'Root'
        WHEN N not in (SELECT P FROM BST) THEN 'Leaf' 
        ELSE 'Inner'
    END
FROM BST
ORDER BY N

처음에 이렇게 썼었는데 오류가 나길래 참고를 하여보니, not in함수 쓸 때 null값을 빼줘야지 잘 작동한다고 한다.

SELECT N,
    CASE
        WHEN P is Null THEN 'Root'
        WHEN N not in (SELECT DISTINCT P FROM BST where P is not Null) THEN 'Leaf' 
        ELSE 'Inner'
    END
FROM BST
ORDER BY N

📌 New Companies

SELECT c.company_code , c.founder, COUNT(DISTINCT l.lead_manager_code), COUNT(DISTINCT s.senior_manager_code), COUNT(DISTINCT m.manager_code), COUNT(DISTINCT e.employee_code)
FROM Company c JOIN Lead_manager l ON c.company_code = l.company_code
    JOIN Senior_manager s ON c.company_code = s.company_code
    JOIN Manager m ON c.company_code = m.company_code
    JOIN Employee e ON c.company_code = e.company_code
GROUP BY c.company_code, c.founder
ORDER BY c.company_code

처음에 GROUP BY c.company_code이렇게 하나만 그룹바이했더니 계속 오류가 났다 그룹바이할 때 카운트 제외하고 나머지 다 기준으로 넣어줘야하나보다.

📌 Occupations

넘 어려워서 남에 꺼보고 이해 ㅜㅜㅜㅜㅜ

profile
개발데분꿈나무🌳

0개의 댓글