[SQL] 힘들땐...SQL을 봐...hackerrank 문제 정리(2)

JIEUN KANG·2020년 11월 28일
2

Weather Observation Station 2

Query the following two values from the STATION table:

The sum of all values in LAT_N rounded to a scale of 2 decimal places.
The sum of all values in LONG_W rounded to a scale of 2 decimal places.

SELECT ROUND(SUM(LAT_N),2), ROUND(SUM(LONG_W),2)
FROM STATION
  • ROUND 함수 안에 SUM을 쓸수 있구나! 너무 좋다.

Weather Observation Station 18

  • manhattan distance : 2점의 좌표를 (x1,y1), (x2,y2)로 했을 때 |x1- x2| + |y1- y2|로 나타내어지는 거리.
SELECT ROUND(ABS(MIN(LAT_N) - MAX(LAT_N)) + ABS(MIN(LONG_W) - MAX(LONG_W)),4)
FROM STATION
  • 문제만 보고 어렵게 생각했었는데 전혀 어렵지 않았던 문제. MAX, MIN, ABS를 적절히 잘써주면 된다.

New Companies


Given the table schemas below, write a query to print the company_code, founder name, total number of lead managers, total number of senior managers, total number of managers, and total number of employees. Order your output by ascending company_code.

  • 요구하는게 다소 많았던 문제였고,
    그룹바이 개념 + distinct에 대한 생각이 있어야 더 잘 풀수 있었던 것 같다.
  • founder name을 가져오기 위해 company 테이블을 employee(가장 베이스가 되는 테이블)에 조인한다고 먼저 생각했다.
#초안
SELECT  C.company_code,
        C.founder,
        COUNT(E.lead_manager_code), 
        COUNT(E.senior_manager_code),
        COUNT(E.manager_code),
        COUNT(E.employee_code)
FROM Employee AS E
    INNER JOIN Company AS C
    ON E.company_code = C.company_code
GROUP BY C.company_code
ORDER BY C.company_code

이렇게 만들어놓고 그룹바이로 인한 에러때문에 계속 어려워했던것 같다.
서브쿼리를 만들어야하나..? 싶어서 계속 헤매고 있었는데
이것저것 그룹바이 쿼리를 찾다보니까.. 그냥 옆에 그룹바이 컬럼을 하나 더 늘리더라.....

SELECT  C.company_code,
        C.founder,
        COUNT(DISTINCT E.lead_manager_code), 
        COUNT(DISTINCT E.senior_manager_code),
        COUNT(DISTINCT E.manager_code),
        COUNT(DISTINCT E.employee_code)
FROM Employee AS E
    INNER JOIN Company AS C
    ON E.company_code = C.company_code
GROUP BY C.company_code, C.founder
ORDER BY C.company_code

duplicate를 신경쓰지 못했어서 distinct 안하고 계속 틀리다가 결국 성공 ㅠㅠ
그룹바이든 뭐든 기초가 탄탄해야 함을 느꼈다...

profile
가장 보통의 존재

0개의 댓글