2024. 3. 30. 22:23ㆍ코딩테스트
1. 연도별 대장균 크기의 편차 구하기
문제 설명
대장균들은 일정 주기로 분화하며, 분화를 시작한 개체를 부모 개체, 분화가 되어 나온 개체를 자식 개체라고 합니다.
다음은 실험실에서 배양한 대장균들의 정보를 담은 ECOLI_DATA 테이블입니다. ECOLI_DATA 테이블의 구조는 다음과 같으며, ID, PARENT_ID, SIZE_OF_COLONY, DIFFERENTIATION_DATE, GENOTYPE 은 각각 대장균 개체의 ID, 부모 개체의 ID, 개체의 크기, 분화되어 나온 날짜, 개체의 형질을 나타냅니다.
ID | INTEGER | FALSE |
PARENT_ID | INTEGER | TRUE |
SIZE_OF_COLONY | INTEGER | FALSE |
DIFFERENTIATION_DATE | DATE | FALSE |
GENOTYPE | INTEGER | FALSE |
최초의 대장균 개체의 PARENT_ID 는 NULL 값입니다.
문제
분화된 연도(YEAR), 분화된 연도별 대장균 크기의 편차(YEAR_DEV), 대장균 개체의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 분화된 연도별 대장균 크기의 편차는 분화된 연도별 가장 큰 대장균의 크기 - 각 대장균의 크기로 구하며 결과는 연도에 대해 오름차순으로 정렬하고 같은 연도에 대해서는 대장균 크기의 편차에 대해 오름차순으로 정렬해주세요.
WITH MAX_TABLE AS (
SELECT
YEAR(DIFFERENTIATION_DATE) YEAR
, MAX(SIZE_OF_COLONY) MAX_SIZE
FROM
ECOLI_DATA
GROUP BY
YEAR
)
SELECT
YEAR(DIFFERENTIATION_DATE) YEAR
, B.MAX_SIZE - A.SIZE_OF_COLONY YEAR_DEV
, A.ID
FROM
ECOLI_DATA A
INNER JOIN MAX_TABLE B
ON YEAR(DIFFERENTIATION_DATE) = B.YEAR
ORDER BY
YEAR
, YEAR_DEV
2. 분기별 분화된 대장균의 개체 수 구하기
문제 설명
대장균들은 일정 주기로 분화하며, 분화를 시작한 개체를 부모 개체, 분화가 되어 나온 개체를 자식 개체라고 합니다.
다음은 실험실에서 배양한 대장균들의 정보를 담은 ECOLI_DATA 테이블입니다. ECOLI_DATA 테이블의 구조는 다음과 같으며, ID, PARENT_ID, SIZE_OF_COLONY, DIFFERENTIATION_DATE, GENOTYPE 은 각각 대장균 개체의 ID, 부모 개체의 ID, 개체의 크기, 분화되어 나온 날짜, 개체의 형질을 나타냅니다.
ID | INTEGER | FALSE |
PARENT_ID | INTEGER | TRUE |
SIZE_OF_COLONY | INTEGER | FALSE |
DIFFERENTIATION_DATE | DATE | FALSE |
GENOTYPE | INTEGER | FALSE |
최초의 대장균 개체의 PARENT_ID 는 NULL 값입니다.
문제
각 분기(QUARTER)별 분화된 대장균의 개체의 총 수(ECOLI_COUNT)를 출력하는 SQL 문을 작성해주세요. 이때 각 분기에는 'Q' 를 붙이고 분기에 대해 오름차순으로 정렬해주세요. 대장균 개체가 분화되지 않은 분기는 없습니다.
SELECT
CONCAT(CEIL(MONTH(DIFFERENTIATION_DATE) / 3), 'Q') QUARTER
, COUNT(ID) ECOLI_COUNT
FROM
ECOLI_DATA
GROUP BY
QUARTER
ORDER BY
QUARTER
3. 특정 물고기를 잡은 총 수 구하기
문제 설명
낚시앱에서 사용하는 FISH_INFO 테이블은 잡은 물고기들의 정보를 담고 있습니다. FISH_INFO 테이블의 구조는 다음과 같으며 ID, FISH_TYPE, LENGTH, TIME은 각각 잡은 물고기의 ID, 물고기의 종류(숫자), 잡은 물고기의 길이(cm), 물고기를 잡은 날짜를 나타냅니다.
Column nameTypeNullableID | INTEGER | FALSE |
FISH_TYPE | INTEGER | FALSE |
LENGTH | FLOAT | TRUE |
TIME | DATE | FALSE |
단, 잡은 물고기의 길이가 10cm 이하일 경우에는 LENGTH 가 NULL 이며, LENGTH 에 NULL 만 있는 경우는 없습니다.
FISH_NAME_INFO 테이블은 물고기의 이름에 대한 정보를 담고 있습니다. FISH_NAME_INFO 테이블의 구조는 다음과 같으며, FISH_TYPE, FISH_NAME 은 각각 물고기의 종류(숫자), 물고기의 이름(문자) 입니다.
Column nameTypeNullableFISH_TYPE | INTEGER | FALSE |
FISH_NAME | VARCHAR | FALSE |
문제
FISH_INFO 테이블에서 잡은 BASS와 SNAPPER의 수를 출력하는 SQL 문을 작성해주세요.
컬럼명은 'FISH_COUNT`로 해주세요.
SELECT COUNT(FISH_NAME) AS FISH_COUNT
FROM FISH_INFO I
LEFT JOIN FISH_NAME_INFO N
ON I.FISH_TYPE = N.FISH_TYPE
WHERE FISH_NAME IN ('BASS', 'SNAPPER');
4. 물고기 종류 별 잡은 수 구하기
문제 설명
낚시앱에서 사용하는 FISH_INFO 테이블은 잡은 물고기들의 정보를 담고 있습니다. FISH_INFO 테이블의 구조는 다음과 같으며 ID, FISH_TYPE, LENGTH, TIME은 각각 잡은 물고기의 ID, 물고기의 종류(숫자), 잡은 물고기의 길이(cm), 물고기를 잡은 날짜를 나타냅니다.
Column nameTypeNullableID | INTEGER | FALSE |
FISH_TYPE | INTEGER | FALSE |
LENGTH | FLOAT | TRUE |
TIME | DATE | FALSE |
단, 잡은 물고기의 길이가 10cm 이하일 경우에는 LENGTH 가 NULL 이며, LENGTH 에 NULL 만 있는 경우는 없습니다.
FISH_NAME_INFO 테이블은 물고기의 이름에 대한 정보를 담고 있습니다. FISH_NAME_INFO 테이블의 구조는 다음과 같으며, FISH_TYPE, FISH_NAME 은 각각 물고기의 종류(숫자), 물고기의 이름(문자) 입니다.
Column nameTypeNullableFISH_TYPE | INTEGER | FALSE |
FISH_NAME | VARCHAR | FALSE |
문제
FISH_NAME_INFO에서 물고기의 종류 별 물고기의 이름과 잡은 수를 출력하는 SQL문을 작성해주세요.
물고기의 이름 컬럼명은 FISH_NAME, 잡은 수 컬럼명은 FISH_COUNT로 해주세요.
결과는 잡은 수 기준으로 내림차순 정렬해주세요.
SELECT COUNT(*) AS FISH_COUNT, FISH_NAME FROM FISH_INFO FI
JOIN FISH_NAME_INFO NI
USING (FISH_TYPE)
GROUP BY FISH_NAME
ORDER BY FISH_COUNT DESC
5. 월별 잡은 물고기 수 구하기
문제 설명
낚시앱에서 사용하는 FISH_INFO 테이블은 잡은 물고기들의 정보를 담고 있습니다. FISH_INFO 테이블의 구조는 다음과 같으며 ID, FISH_TYPE, LENGTH, TIME은 각각 잡은 물고기의 ID, 물고기의 종류(숫자), 잡은 물고기의 길이(cm), 물고기를 잡은 날짜를 나타냅니다.
Column nameTypeNullableID | INTEGER | FALSE |
FISH_TYPE | INTEGER | FALSE |
LENGTH | FLOAT | TRUE |
TIME | DATE | FALSE |
단, 잡은 물고기의 길이가 10cm 이하일 경우에는 LENGTH 가 NULL 이며, LENGTH 에 NULL 만 있는 경우는 없습니다.
문제
월별 잡은 물고기의 수와 월을 출력하는 SQL문을 작성해주세요.
잡은 물고기 수 컬럼명은 FISH_COUNT, 월 컬럼명은 MONTH로 해주세요.
결과는 월을 기준으로 오름차순 정렬해주세요.
단, 월은 숫자형태 (1~12) 로 출력하며 9 이하의 숫자는 두 자리로 출력하지 않습니다. 잡은 물고기가 없는 월은 출력하지 않습니다.
SELECT
COUNT(ID) FISH_COUNT
, MONTH(TIME) MONTH
FROM
FISH_INFO
GROUP BY
MONTH
ORDER BY
MONTH
'코딩테스트' 카테고리의 다른 글
[SQL] SQL과 python 연동을 통하여 aircrafts_data 분석 (0) | 2024.05.02 |
---|---|
[SQL] 프로그래머스 6 (1) | 2024.04.11 |
[SQL] 프로그래머스 4 (1) | 2024.03.22 |
[SQL] 프로그래머스 3 (1) | 2024.03.22 |
SQL 프로그래머스 코딩테스트 연습 2 (0) | 2024.03.14 |