데이터 분석/코딩 테스트_SQL
[코딩 테스트] SQL - 프로그래머스 Lv.2
초코레모네이드
2023. 10. 19. 11:05
프로그래머스 코딩테스트
MySQL: SUM, MAX, MIN
동물 수 구하기
동물 보호소에 동물이 몇 마리 들어왔는지 조회하는 SQL 문을 작성해주세요.
select count(ANIMAL_ID) as count from ANIMAL_INS;
프로그래머스 코딩테스트
MySQL: SUM, MAX, MIN
최솟값 구하기
동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.
select DATETIME as 시간 from ANIMAL_INS order by DATETIME ASC LIMIT 1;
프로그래머스 코딩테스트
MySQL: SUM, MAX, MIN
중복 제거하기
동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.
select count(distinct NAME) as count from ANIMAL_INS where NAME is not null;
프로그래머스 코딩테스트
MySQL: GROUP BY
동명 동물 수 찾기
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
select NAME, count(NAME) as COUNT from ANIMAL_INS
group by NAME
having COUNT >1 and NAME is not null
order by NAME;
프로그래머스 코딩테스트
MySQL: String, Date
이름에 el이 들어가는 동물 찾기
보호소에 돌아가신 할머니가 기르던 개를 찾는 사람이 찾아왔습니다. 이 사람이 말하길 할머니가 기르던 개는 이름에 'el'이 들어간다고 합니다. 동물 보호소에 들어온 동물 이름 중, 이름에 "EL"이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 이름 순으로 조회해주세요. 단, 이름의 대소문자는 구분하지 않습니다.
SELECT ANIMAL_ID, NAME from ANIMAL_INS
where NAME like '%el%' and ANIMAL_TYPE = 'Dog'
order by NAME;
프로그래머스 코딩테스트
MySQL: IS NULL
NULL 처리하기
입양 게시판에 동물 정보를 게시하려 합니다. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.
select ANIMAL_TYPE, ifnull(NAME, 'No name') as NAME, SEX_UPON_INTAKE
from ANIMAL_INS
order by ANIMAL_ID;
프로그래머스 코딩테스트
MySQL: String, Date
DATETIME에서 DATE로 형 변환
ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다.
select ANIMAL_ID, NAME, date_format(DATETIME, '%Y-%m-%d') as 날짜
from ANIMAL_INS
order by ANIMAL_ID;
프로그래머스 코딩테스트
MySQL: SUM, MAX, MIN
가격이 제일 비싼 식품의 정보 출력하기
FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회하는 SQL문을 작성해주세요.
select PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
from FOOD_PRODUCT order by PRICE DESC limit 1;
프로그래머스 코딩테스트
MySQL: String, Date
중성화 여부 파악하기
보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.
-- IF(조건문, 참 값, 거짓 값)
select ANIMAL_ID, NAME, if(SEX_UPON_INTAKE like '%Neutered%' or SEX_UPON_INTAKE like '%Spayed%', 'O', 'X') as 중성화
from ANIMAL_INS
order by ANIMAL_ID;
프로그래머스 코딩테스트
MySQL: GROUP BY
고양이와 개는 몇 마리 있을까
동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.
select ANIMAL_TYPE, count(ANIMAL_TYPE) as count from ANIMAL_INS
group by ANIMAL_TYPE order by ANIMAL_TYPE;
프로그래머스 코딩테스트
MySQL: String, Date
카테고리 별 상품 개수 구하기
PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.
select left(PRODUCT_CODE, 2) as CATEGORY, count(PRODUCT_ID) as PRODUCTS
from PRODUCT
group by CATEGORY
order by CATEGORY;
프로그래머스 코딩테스트
MySQL: GROUP BY
입양 시각 구하기(1)
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
# 시간: 09:00 ~ 19:59
# '시간대 별로' = 시간대로 그룹화
select date_format(DATETIME, '%H') as HOUR, count(ANIMAL_ID) as COUNT
from ANIMAL_OUTS
group by HOUR having HOUR >=9 and HOUR <=20
order by HOUR;
프로그래머스 코딩테스트
MySQL: GROUP BY
진료과별 총 예약 횟수 출력하기
APPOINTMENT 테이블에서 2022년 5월에 예약한 환자 수를 진료과코드 별로 조회하는 SQL문을 작성해주세요. 이때, 컬럼명은 '진료과 코드', '5월예약건수'로 지정해주시고 결과는 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬해주세요.
# 1. 예약 날짜 = 2022년 5월
# 2. 진료과코드 별로 조회 = 진료과코드로 그룹화
select MCDP_CD as 진료과코드, count(APNT_YMD) as 5월예약건수
from APPOINTMENT
where date_format(APNT_YMD, '%Y-%m') = '2022-05'
group by 진료과코드
order by 5월예약건수 ASC, 진료과코드 ASC;
프로그래머스 코딩테스트
MySQL: JOIN
상품 별 오프라인 매출 구하기
PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.
select PRODUCT_CODE, sum(PRICE * SALES_AMOUNT) as SALES
from PRODUCT as P
join OFFLINE_SALE as O
where P.PRODUCT_ID = O.PRODUCT_ID
group by PRODUCT_CODE
order by SALES DESC, PRODUCT_CODE;
프로그래머스 코딩테스트
MySQL: GROUP BY
자동차 종류별 특정 옵션이 포함된 자동차 수 구하기
CAR_RENTAL_COMPANY_CAR 테이블에서 '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가 자동차 종류 별로 몇 대인지 출력하는 SQL문을 작성해주세요. 이때 자동차 수에 대한 컬럼명은 CARS로 지정하고, 결과는 자동차 종류를 기준으로 오름차순 정렬해주세요.
select CAR_TYPE, count(CAR_ID) as CARS
from CAR_RENTAL_COMPANY_CAR
where OPTIONS regexp '가죽시트|열선시트|통풍시트'
group by CAR_TYPE
order by CAR_TYPE;
프로그래머스 코딩테스트
MySQL: JOIN
조건에 맞는 도서와 저자 리스트 출력하기
'경제' 카테고리에 속하는 도서들의 도서 ID(BOOK_ID), 저자명(AUTHOR_NAME), 출판일(PUBLISHED_DATE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 출판일을 기준으로 오름차순 정렬해주세요.
select BOOK_ID, AUTHOR_NAME, date_format(PUBLISHED_DATE, '%Y-%m-%d') as PUBLISHED_DATE
from BOOK as B join AUTHOR as A
where B.AUTHOR_ID = A.AUTHOR_ID and CATEGORY = '경제'
order by PUBLISHED_DATE;
프로그래머스 코딩테스트
MySQL: GROUP BY
성분으로 구분한 아이스크림 총 주문량
상반기 동안 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총주문량을 총주문량이 작은 순서대로 조회하는 SQL 문을 작성해주세요. 이때 총주문량을 나타내는 컬럼명은 TOTAL_ORDER로 지정해주세요.
select if(left(INGREDIENT_TYPE,5) ='sugar', 'sugar_based', 'fruit_based') as INGREDIENT_TYPE,
sum(TOTAL_ORDER) as TOTAL_ORDER
from FIRST_HALF as HALF join ICECREAM_INFO as INFO
where HALF.FLAVOR = INFO.FLAVOR
group by INGREDIENT_TYPE
order by TOTAL_ORDER;
프로그래머스 코딩테스트
MySQL: String, Date
루시와 엘라 찾기
동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL 문을 작성해주세요.
select ANIMAL_ID, NAME, SEX_UPON_INTAKE
from ANIMAL_INS
where NAME in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
order by ANIMAL_ID;
프로그래머스 코딩테스트
MySQL: SELECT
3월에 태어난 여성 회원 목록 출력하기
MEMBER_PROFILE 테이블에서 생일이 3월인 여성 회원의 ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성해주세요. 이때 전화번호가 NULL인 경우는 출력대상에서 제외시켜 주시고, 결과는 회원ID를 기준으로 오름차순 정렬해주세요.
select MEMBER_ID, MEMBER_NAME, GENDER, date_format(DATE_OF_BIRTH, '%Y-%m-%d') as DATE_OF_BIRTH
from MEMBER_PROFILE
where GENDER = 'W' and date_format(DATE_OF_BIRTH, '%M') = 'March' and TLNO is not null
order by MEMBER_ID ASC;
프로그래머스 코딩테스트
MySQL: GROUP BY
가격대 별 상품 개수 구하기
PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.
# 최소가격 15,000, 최대가격은 85,000원
select case
when (PRICE between 0 and 9999) then 0
when (PRICE between 10000 and 19999) then 10000
when (PRICE between 20000 and 29999) then 20000
when (PRICE between 30000 and 39999) then 30000
when (PRICE between 40000 and 49999) then 40000
when (PRICE between 50000 and 59999) then 50000
when (PRICE between 60000 and 69999) then 60000
when (PRICE between 70000 and 79999) then 70000
when (PRICE >= 80000) then 80000
end as PRICE_GROUP,
count(PRODUCT_ID) as PRODUCTS
from PRODUCT
group by PRICE_GROUP
order by PRICE_GROUP;
프로그래머스 코딩테스트
MySQL: SELECT
재구매가 일어난 상품과 회원 리스트 구하기
ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.
select USER_ID,PRODUCT_ID
from ONLINE_SALE
group by USER_ID,PRODUCT_ID having count (*)>=2
order by USER_ID,PRODUCT_ID desc;
프로그래머스 코딩테스트
MySQL: String, Date
조건에 부합하는 중고거래 상태 확인하기
USED_GOODS_BOARD 테이블에서 2022년 10월 5일에 등록된 중고거래 게시물의 게시글 ID, 작성자 ID, 게시글 제목, 가격, 거래상태를 조회하는 SQL문을 작성해주세요. 거래상태가 SALE 이면 판매중, RESERVED이면 예약중, DONE이면 거래완료 분류하여 출력해주시고, 결과는 게시글 ID를 기준으로 내림차순 정렬해주세요.
select BOARD_ID, WRITER_ID, TITLE, PRICE,
(case
when STATUS = 'SALE' then '판매중'
when STATUS = 'RESERVED' then '예약중'
when STATUS = 'DONE' then '거래완료'
end
) as STATUS
from USED_GOODS_BOARD
where date_format(CREATED_DATE, '%Y') = 2022
and date_format(CREATED_DATE, '%m') = 10
and date_format(CREATED_DATE, '%d') = 05
order by BOARD_ID desc;
프로그래머스 코딩테스트
MySQL: String, Date
자동차 평균 대여 기간 구하기
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성해주세요. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.
select CAR_ID, round(avg(datediff(END_DATE, START_DATE)), 1) + 1 as AVERAGE_DURATION
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
group by CAR_ID having AVERAGE_DURATION >= 7
order by AVERAGE_DURATION desc, CAR_ID desc;
728x90