프로그래머스 8문제 풀기

는는·2024년 6월 4일
0

SQL - 문제 풀이

목록 보기
77/77

Python 개발자 찾기

DEVELOPER_INFOS 테이블에서 Python 스킬을 가진 개발자의 정보를 조회하려 합니다. Python 스킬을 가진 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.
결과는 ID를 기준으로 오름차순 정렬해 주세요.

DEVELOPER_INFOS 테이블 안에는 3가지의 스킬이 있는데요 그 스킬 안에 Python이 있는 정보를 가져오는 문제입니다.
WHERE절에서 OR를 통해 3가지 스킬 컬럼중 python 스킬이 있는 값을 불러옵니다.
그후 ID 기준으로 정렬해주고, 지정된 값을 불러오면 정답입니다.

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME 
FROM DEVELOPER_INFOS
WHERE SKILL_1 ="Python" or SKILL_2 = "Python" or SKILL_3 ="Python"
ORDER by id

조건에 맞는 아이템들의 가격의 총합 구하기

ITEM_INFO 테이블에서 희귀도가 'LEGEND'인 아이템들의 가격의 총합을 구하는 SQL문을 작성해 주세요. 이때 컬럼명은 'TOTAL_PRICE'로 지정해 주세요.

WHERE절에서 희귀도, RARITY가 LEGEND인 값을 불러오는 문제입니다.
그 후에 SUM 함수를 통해 PRICE의 값을 더해주면 정답입니다.

SELECT SUM(PRICE) TOTAL_PRICE
FROM ITEM_INFO
WHERE RARITY = "LEGEND"

ROOT 아이템 구하기

ROOT 아이템을 찾아 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME)을 출력하는 SQL문을 작성해 주세요. 이때, 결과는 아이템 ID를 기준으로 오름차순 정렬해 주세요

  • 단, 각 아이템들은 오직 하나의 PARENT 아이템 ID를 가지며, ROOT 아이템의 PARENT 아이템 ID는 NULL 입니다.
    ROOT 아이템이 없는 경우는 존재하지 않습니다.

join 함수로 2개의 테이블을 합쳐줍니다. 기준이 되는 값은 공통으로 가지고 있는 item_id 칼럼으로 지정하고
WHERE절에서 parent_item__id 가 null을 가진 값을 불러오면 정답입니다.

SELECT A.ITEM_ID, ITEM_NAME
FROM ITEM_TREE A join ITEM_INFO B ON A.item_id = B.item_id
WHERE PARENT_ITEM_ID IS NULL

조건에 맞는 사원 정보 조회하기

HR_DEPARTMENT, HR_EMPLOYEES, HR_GRADE 테이블에서 2022년도 한해 평가 점수가 가장 높은 사원 정보를 조회하려 합니다. 2022년도 평가 점수가 가장 높은 사원들의 점수, 사번, 성명, 직책, 이메일을 조회하는 SQL문을 작성해주세요.
2022년도의 평가 점수는 상,하반기 점수의 합을 의미하고, 평가 점수를 나타내는 컬럼의 이름은 SCORE로 해주세요.

3가지 테이블을 조인해야 하는 문제입니다.
기준점, 공통으로 가지고 있는 값을 기준으로 조인합니다.
그 후에는 WHERE절에서 2022년인 값을 불러옵니다.
GROUP BY에서 emp_no 별로 그룹화 한 후 ORDER BY에서 점수 별로 내림차순 정렬합니다.
select 절에서 sum 함수를 통해 점수를 합산하고, 지정된 값을 불러 온 후
LIMIT를 통해 1가지 값을 가져오면 정답입니다.

SELECT  sum(score) score, B.EMP_NO, EMP_NAME, POSITION, EMAIL
FROM HR_DEPARTMENT A join HR_EMPLOYEES B on A.DEPT_ID = B.DEPT_ID join HR_GRADE C ON  B.EMP_NO = C.EMP_NO
WHERE year = "2022"
GROUP BY C.EMP_NO
ORDER BY SCORE DESC
LIMIT 1

부서별 평균 연봉 조회하기

HR_DEPARTMENT와 HR_EMPLOYEES 테이블을 이용해 부서별 평균 연봉을 조회하려 합니다. 부서별로 부서 ID, 영문 부서명, 평균 연봉을 조회하는 SQL문을 작성해주세요.
평균연봉은 소수점 첫째 자리에서 반올림하고 컬럼명은 AVG_SAL로 해주세요.
결과는 부서별 평균 연봉을 기준으로 내림차순 정렬해주세요.

두가지 테이블을 조인 합니다.
DEPT_ID 별로 그룹화를 해주고 SELECT 절에서 AVG_SAL값을 구해야하는데요.
SAL를 AVG함수를 이용해서 평균을 구해주고, ROUND 함수로 첫 번째 자리에서 반올림 해줍니다.
이 후에 AVG_SAL 별로 내림차순 정렬해주면 정답입니다.

SELECT A.DEPT_ID, DEPT_NAME_EN, ROUND(AVG(SAL),0) AVG_SAL
FROM HR_DEPARTMENT A JOIN HR_EMPLOYEES B ON A.DEPT_ID = B.DEPT_ID
GROUP BY A.DEPT_ID
ORDER BY AVG_SAL DESC

노선별 평균 역 사이 거리 조회하기

SUBWAY_DISTANCE 테이블에서 노선별로 노선, 총 누계 거리, 평균 역 사이 거리를 노선별로 조회하는 SQL문을 작성해주세요.
총 누계거리는 테이블 내 존재하는 역들의 역 사이 거리의 총 합을 뜻합니다. 총 누계 거리와 평균 역 사이 거리의 컬럼명은 각각 TOTAL_DISTANCE, AVERAGE_DISTANCE로 해주시고, 총 누계거리는 소수 둘째자리에서, 평균 역 사이 거리는 소수 셋째 자리에서 반올림 한 뒤 단위(km)를 함께 출력해주세요.
결과는 총 누계 거리를 기준으로 내림차순 정렬해주세요.

ROUTE 별로 그룹화 해줍니다. select 절에서 평균역 사이 거리를 SUM함수로 더하고 round 함수를 통해 반올림 해줍니다. 그 후에 CONCAT으로 km를 붙여주고, TOTAL_DISTANCE로 컬럼명을 변경해줍니다.
동일한 방법으로 AVG함수를 통해 평균을 내주면 됩니다.

그후에 총 누계 거리 기준으로 내림차순 정렬해주면 정답입니다.

SELECT ROUTE ,
concat(round(sum(D_BETWEEN_DIST),1),'km') TOTAL_DISTANCE ,
concat(round(AVG(D_BETWEEN_DIST),2),"km") AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY sum(D_BETWEEN_DIST) DESC

연도 별 평균 미세먼지 농도 조회하기

AIR_POLLUTION 테이블에서 수원 지역의 연도 별 평균 미세먼지 오염도와 평균 초미세먼지 오염도를 조회하는 SQL문을 작성해주세요. 이때, 평균 미세먼지 오염도와 평균 초미세먼지 오염도의 컬럼명은 각각 PM10, PM2.5로 해 주시고, 값은 소수 셋째 자리에서 반올림해주세요.
결과는 연도를 기준으로 오름차순 정렬해주세요.

WHERE절에서 지역이 수원인 값을 불러옵니다. 연도 별로 그룹화 해주고,
SELECT절에서 PM10과 PM2.5 컬럼을 구해줘야하는데요

AVG함수를 이용해서 평균 미세먼지 오염도를 구하고 ROUND 함수를 이용하여 반올림해줍니다. 그 후에 PM10으로 컬럼명을 변경해주면 됩니다. 초미세먼지 오염도 또한 위와 값은 방법으로 구해주면 되는데요. 유의할 점은 PM2.5 컬럼명이 .때문에 출력이 안되기에 "" 를 통해 문자로 묶어줘야합니다. 그 후에는 년도별로 오름차순 정렬해주면 정답입니다.

SELECT YEAR(YM) year
,round(AVG(PM_VAL1),2) PM10,round(AVG(PM_VAL2),2) AS 'PM2.5'
FROM AIR_POLLUTION
WHERE LOCATION2 = "수원"
GROUP by YEAR
ORDER BY YEAR

대장균의 크기에 따라 분류하기 1

대장균 개체의 크기가 100 이하라면 'LOW', 100 초과 1000 이하라면 'MEDIUM', 1000 초과라면 'HIGH' 라고 분류합니다. 대장균 개체의 ID(ID) 와 분류(SIZE)를 출력하는 SQL 문을 작성해주세요.이때 결과는 개체의 ID 에 대해 오름차순 정렬해주세요.

SELECT절에서 CASE문을 통해 대장균 개체 크기를 분류 해줘야하는데요

크기가 100이 넘지 못하면 LOW 값으로 주고, 크기가 1000를 넘지 못하면 MEDIUM else를 통해 둘다 아니면 HIGH다 라고 지정해줍니다.
그후 ID 별로 오름차순 정렬해주면 정답입니다.

SELECT ID, CASE WHEN SIZE_OF_COLONY <= 100 THEN "LOW"
WHEN SIZE_OF_COLONY <= 1000 THEN "MEDIUM" 
ELSE "HIGH" END SIZE
FROM ECOLI_DATA
ORDER BY ID

0개의 댓글