저번 글과 마찬가지로 풀 때 썼던 메모 그대로 가져옴
1. Japan Population
https://www.hackerrank.com/challenges/japan-population/problem
SELECT SUM(population)
FROM city
WHERE countrycode = 'JPN'
2. Weather Observation Station 2
https://www.hackerrank.com/challenges/weather-observation-station-2/problem
SELECT ROUND(SUM(LAT_N),2) AS lat, ROUND(SUM(LONG_W),2) AS lon
FROM station
3. Weather Observation Station 18
https://www.hackerrank.com/challenges/weather-observation-station-18/problem?isFullScreen=true
/* 2차 평면의 두 좌표 p1, p2
a는 lat_n의 최소값, b는 long_W의 최소값 c...d는 각 칼럼의 최댓값
p1과 p2 사이의 맨해튼 거리를 구하고, 소수점 4자리까지 반올림
맨허튼 거리 = ∣a−c∣+∣b−d∣
*/
SELECT ROUND((ABS(MIN(lat_n) - MAX(lat_n))) + ABS(MIN(long_w) - MAX(long_w)), 4)
FROM station
↓ 4번 문제는 난이도 상
4. New Companies
https://www.hackerrank.com/challenges/the-company/problem
/*
1. 구할 것: 회사코드, 설립자이름, 리드매니저의 총 수, 시니어 매니저의 총 수, 매니저의 총 수, 고용인의 총 수, 회사코드 오름차순으로 정렬
2. 참고: 중복 기록이 있을 것임, 회사코드는 문자열이라 숫자로 정렬하면 안될 것 >> 알파벳이 먼저고 2보다 10이 먼저임(1로 시작하니까)
3. 정보: 테이블이 총 5개 >> 마지막 employee테이블에 모든 정보가 다 있다고 생각하기 쉬운데, 예를 들어 부하 직원인 manager가 밑에 없는 sm2의 정보는 나와있지 않음
4. 접근: company_code는 모든 테이블에 있으므로 이걸 기준 키로 left join 해야되나? >> 하위 테이블로 갈수록 계속 조인, 명 수 물어보는건 count, 중복 제거는 distinct, 예시 아웃풋을 보니까 groupby도 해야 함
*/
SELECT c.company_code
, c.founder
, COUNT(DISTINCT(lm.lead_manager_code))
, COUNT(DISTINCT(sm.senior_manager_code))
, COUNT(DISTINCT(m.manager_code))
, COUNT(DISTINCT(e.employee_code))
FROM company AS c
LEFT JOIN lead_manager AS lm ON c.company_code = lm.company_code
LEFT JOIN senior_manager AS sm ON lm.lead_manager_code = sm.lead_manager_code
LEFT JOIN manager AS m ON sm.senior_manager_code = m.senior_manager_code
LEFT JOIN employee AS e ON m.manager_code = e.manager_code
GROUP BY c.company_code, c.founder
ORDER BY c.company_code
>> 문제 해석부터 잘 하고, 어떤 함수 필요한지 순서대로 입력하다보면 그리 어렵지는 않을 것 같다. run code를 했을 때랑 test case로 돌렸을 때랑 다르게 나올 수 있으므로 주의!
'SQL' 카테고리의 다른 글
프로그래머스 SQL - 강원도에 위치한 생산공장 목록 출력하기 (0) | 2025.01.25 |
---|---|
프로그래머스 SQL - 흉부외과 또는 일반외과 의사 목록 출력하기 (0) | 2025.01.25 |
LeetCode SQL 4문제 풀이 (0) | 2025.01.15 |
MySQL 숫자, 문자열 다루는 함수 정리 (0) | 2025.01.15 |
DATE_ADD, DATE_SUB 시간 더하기, 빼기 + 리트코드 예제 (0) | 2025.01.10 |