[프로그래머스] SQL 02.

yoong·2023년 6월 16일
0

7. SQL

목록 보기
5/5

01.동명 동물 수 찾기(다시)

Probem
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

Answer

SELECT NAME,COUNT(NAME) AS COUNT_NAME FROM ANIMAL_INS
GROUP BY NAME 
HAVING COUNT_NAME > 1
ORDER BY NAME

Memo

02.이름에 el이 들어가는 동물 찾기

Probem
보호소에 돌아가신 할머니가 기르던 개를 찾는 사람이 찾아왔습니다. 이 사람이 말하길 할머니가 기르던 개는 이름에 'el'이 들어간다고 합니다. 동물 보호소에 들어온 동물 이름 중, 이름에 "EL"이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 이름 순으로 조회해주세요. 단, 이름의 대소문자는 구분하지 않습니다.

Answer

SELECT ANIMAL_ID,NAME FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE '%el%'
ORDER BY NAME

Memo

03.DATETIME에서 DATE로 형 변환

Probem
ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜1를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다.

Answer

SELECT ANIMAL_ID,NAME,DATE_FORMAT(DATETIME,"%Y-%m-%d") AS '날짜' FROM ANIMAL_INS 

Memo

04.중성화 여부 파악하기(다시)

Probem
보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

Answer

SELECT ANIMAL_ID,NAME,
CASE WHEN SEX_UPON_INTAKE = 'Neutered Male' OR SEX_UPON_INTAKE = 'Spayed Female' THEN 'O'
ELSE 'X'
END AS '중성화'
FROM ANIMAL_INS

Memo

  • case when 아직 손에 안붙음,,,

05.고양이와 개는 몇 마리 있을까

Probem
동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.

Answer

SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS 'count' FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE ASC

Memo

06. 카테고리 별 상품 개수 구하기

Probem
PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.

Answer

SELECT LEFT (PRODUCT_CODE,2) AS CATEGORY,COUNT(PRODUCT_CODE) AS PRODUCTS FROM PRODUCT
GROUP BY CATEGORY

Memo

07.진료과별 총 예약 횟수 출력하기

Probem
APPOINTMENT 테이블에서 2022년 5월에 예약한 환자 수를 진료과코드 별로 조회하는 SQL문을 작성해주세요. 이때, 컬럼명은 '진료과 코드', '5월예약건수'로 지정해주시고 결과는 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬해주세요.

Answer

SELECT MCDP_CD AS '진료과코드', COUNT(PT_NO) AS '5월예약건수' FROM APPOINTMENT
WHERE YEAR(APNT_YMD) = '2022' AND MONTH(APNT_YMD) = '5'
GROUP BY MCDP_CD
ORDER BY 5월예약건수,진료과코드

Memo

08.자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

Probem
CAR_RENTAL_COMPANY_CAR 테이블에서 '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가 자동차 종류 별로 몇 대인지 출력하는 SQL문을 작성해주세요. 이때 자동차 수에 대한 컬럼명은 CARS로 지정하고, 결과는 자동차 종류를 기준으로 오름차순 정렬해주세요.

Answer

SELECT CAR_TYPE, COUNT(CAR_TYPE) AS 'CARS' FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%가죽시트%' OR
OPTIONS LIKE '%통풍시트%' OR
OPTIONS LIKE '%열선시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC

Memo

09.상품 별 오프라인 매출 구하기

Probem
PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.

Answer

SELECT P.PRODUCT_CODE,SUM(O.SALES_AMOUNT * P.PRICE) AS SALES FROM PRODUCT P
INNER JOIN OFFLINE_SALE O ON O.PRODUCT_ID = P.PRODUCT_ID
GROUP BY PRODUCT_CODE
ORDER BY SALES DESC, PRODUCT_CODE ASC

Memo

10.루시와 엘라 찾기

Probem
동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL 문을 작성해주세요.

Answer

SELECT ANIMAL_ID,NAME,SEX_UPON_INTAKE FROM ANIMAL_INS
WHERE NAME IN ('LUCY','ELLA','Pickle','Rogan','Sabrina','Mitty')

Memo

11.성분으로 구분한 아이스크림 총 주문량(다시)

Probem
상반기 동안 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총주문량을 총주문량이 작은 순서대로 조회하는 SQL 문을 작성해주세요. 이때 총주문량을 나타내는 컬럼명은 TOTAL_ORDER로 지정해주세요.

Answer

SELECT I.INGREDIENT_TYPE,SUM(H.TOTAL_ORDER) FROM FIRST_HALF H
INNER JOIN ICECREAM_INFO I ON I.FLAVOR = H.FLAVOR
GROUP BY I.INGREDIENT_TYPE

Memo

12.입양 시각 구하기(1)

Probem
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

Answer

SELECT HOUR(DATETIME) HOUR , COUNT(DATETIME) 'COUNT' FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR >= 9 AND HOUR <=19
ORDER BY HOUR

Memo

13.

Probem
PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.

Answer

SELECT TRUNCATE(PRICE,-4) AS PRICE_GROUP,COUNT(PRODUCT_ID) FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP
#case when으로 0-10000 값 처리해줌
SELECT (
    CASE WHEN PRICE < 10000 THEN 0
    ELSE TRUNCATE(PRICE,-4) END) AS PRICE_GROUP,COUNT(PRODUCT_ID) FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP

Memo
-truncate로 푸니 0값이 없는데 정답처리가 되서 띠옹

14.3월에 태어난 여성 회원 목록 출력하기

Probem

Answer

SELECT MEMBER_ID,MEMBER_NAME,GENDER,DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d') AS DATE_OF_BIRTH FROM MEMBER_PROFILE
WHERE MONTH(DATE_OF_BIRTH) = 3 
AND TLNO IS NOT NULL
AND GENDER = 'W'
ORDER BY MEMBER_ID ASC

Memo

15.재구매가 일어난 상품과 회원 리스트 구하기

Probem
ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.

Answer

SELECT USER_ID,PRODUCT_ID FROM ONLINE_SALE
GROUP BY USER_ID,PRODUCT_ID
HAVING COUNT(PRODUCT_ID) >=2
ORDER BY USER_ID,PRODUCT_ID DESC

Memo

16.조건에 부합하는 중고거래 상태 조회하기

Probem
USED_GOODS_BOARD 테이블에서 2022년 10월 5일에 등록된 중고거래 게시물의 게시글 ID, 작성자 ID, 게시글 제목, 가격, 거래상태를 조회하는 SQL문을 작성해주세요. 거래상태가 SALE 이면 판매중, RESERVED이면 예약중, DONE이면 거래완료 분류하여 출력해주시고, 결과는 게시글 ID를 기준으로 내림차순 정렬해주세요.

Answer

SELECT BOARD_ID,WRITER_ID,TITLE,PRICE, 
CASE WHEN STATUS = 'SALE' THEN '판매중'
WHEN STATUS = 'RESERVED' THEN '예약중'
ELSE '거래완료'
END AS STATUS

FROM USED_GOODS_BOARD
WHERE CREATED_DATE = '2022-10-05'
ORDER BY BOARD_ID DESC;

Memo

  • 거래완료를 판매완료라고 써놓고 코드뭐틀렸지 계속 찾은
    나....

17.자동차 평균 대여 기간 구하기

Probem

Answer

Memo

마지막 문제 빼고 2단계도 완!
아직 group by랑 having 연습이 필요할듯

profile
데이터와 이미지로 세상을 공부하는 중입니다 :)

0개의 댓글

관련 채용 정보