티스토리 뷰

문제 순서

  1. 평균 일일 대여 요금 구하기  (Level1)
  2. 조건에 맞는 도서 리스트 출력하기 (Level1)
  3. 12세 이하인 여자 환자 목록 출력하기 (Level1)
  4. 조건에 부합하는 중고거래 댓글 조회하기 (Level1)
  5. 3월에 태어난 여성 회원 목록 출력하기 (Level2)
  6. 흉부외과 또는 일반외과 의사 목록 출력하기 (Level1)
  7. 과일로 만든 아이스크림 고르기 (Level1)
  8. 인기있는 아이스크림 (Level1)
  9. 강원도에 위치한 생산공장 목록 출력하기 (Level1)
  10. 재구매가 일어난 상품과 회원 리스트 (Level2)
  11. Python 개발자 찾기 (Level1)
  12. 조건에 맞는 개발자 찾기 (Level2)
  13. 잔챙이 잡은 수 구하기 (Level1)
  14. 가장 큰 물고기 10마리 구하기 (Level1)
  15. 특정 물고기를 잡은 총 수 구하기 (Level2)

 

✅ 15문제에 대한 답만 작성했습니다. 점차 추가해 나가겠습니다.

 

https://school.programmers.co.kr/learn/courses/30/parts/17042

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


평균 일일 대여 요금 구하기

SELECT ROUND(AVG(DAILY_FEE), 0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV';

 

 

조건에 맞는 도서 리스트 출력하기

  • DATE_FORMAT()
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK
WHERE YEAR(PUBLISHED_DATE) = 2021 AND CATEGORY = '인문'
ORDER BY PUBLISHED_DATE;

 

 

12세 이하인 여자 환자 목록 출력하기

  • IFNULL(<컬럼>, '값')
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, 'NONE') AS TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME

 

 

조건에 부합하는 중고거래 댓글 조회하기

SELECT
    B.TITLE,
    B.BOARD_ID,
    R.REPLY_ID,
    R.WRITER_ID,
    R.CONTENTS,
    DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_REPLY R
    LEFT JOIN USED_GOODS_BOARD B
    ON B.BOARD_ID = R.BOARD_ID
WHERE YEAR(B.CREATED_DATE) = 2022 AND MONTH(B.CREATED_DATE) = 10
ORDER BY R.CREATED_DATE, B.TITLE;

 

 

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

  • MONTH()
  • IS NOT NULL
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 MONTH(DATE_OF_BIRTH) = 3 AND TLNO IS NOT NULL
ORDER BY MEMBER_ID

 

 

흉부외과 또는 일반외과 의사 목록 출력하기

  • DATE_FORMAT()
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD in ('CS', 'GS')
ORDER BY HIRE_YMD DESC, DR_NAME;

 

 

과일로 만든 아이스크림 고르기

SELECT F.FLAVOR
FROM FIRST_HALF F
    INNER JOIN
    (
        SELECT FLAVOR
        FROM ICECREAM_INFO
        WHERE INGREDIENT_TYPE = 'fruit_based'
    ) I
    ON F.FLAVOR = I.FLAVOR
WHERE F.TOTAL_ORDER > 3000
ORDER BY F.TOTAL_ORDER DESC;

 

 

인기있는 아이스크림

SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID;

 

 

강원도에 위치한 생산공장 목록 출력하기

SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE "강원도%"
ORDER BY FACTORY_ID;

 

 

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

SELECT DISTINCT O.USER_ID AS USER_ID, O.PRODUCT_ID AS PRODUCT_ID
FROM ONLINE_SALE O
WHERE
    (
        SELECT COUNT(*)
        FROM ONLINE_SALE OS
        WHERE O.USER_ID = OS.USER_ID AND O.PRODUCT_ID = OS.PRODUCT_ID
    ) > 1
ORDER BY USER_ID, PRODUCT_ID DESC

 

혹은

SELECT DISTINCT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID, PRODUCT_ID DESC

 

 

Python 개발자 찾기

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPER_INFOS
WHERE "Python" IN (SKILL_1, SKILL_2, SKILL_3)
ORDER BY ID;

# WHERE절에 SKILL_1 = "Python" OR SKILL_2 = "Python" OR SKILL_3 = "Python" 가능

 

 

조건에 맞는 개발자 찾기

  • 비트 연산자 &
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE
    SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = "Python")
    OR
    SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = "C#")
ORDER BY ID;

 

 

잔챙이 잡은 수 구하기

SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO
WHERE LENGTH IS NULL;

 

 

가장 큰 물고기 10마리 구하기

SELECT ID, LENGTH
FROM FISH_INFO
ORDER BY LENGTH DESC, ID
LIMIT 10;

 

 

특정 물고기를 잡은 총 수 구하기

SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO
WHERE
    FISH_TYPE IN
        (
            SELECT FISH_TYPE
            FROM FISH_NAME_INFO
            WHERE FISH_NAME IN ('BASS', 'SNAPPER')
        );

 

혹은 Inner Join을 사용할 수도 있다.

SELECT COUNT(I.ID) AS FISH_COUNT
FROM
    FISH_INFO I
    INNER JOIN FISH_NAME_INFO N
    ON I.FISH_TYPE = N.FISH_TYPE
WHERE N.FISH_NAME IN ('BASS', 'SNAPPER');
728x90