프로그래머스 SQL 문제_SELECT
SELECT
1) 상위 N개의 레코드
- 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요
SELECT NAME FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1
2) 조건에 맞는 회원 수 구하기
- USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요
SELECT COUNT(USER_ID) AS USER
FROM USER_INFO
WHERE YEAR(joined) = '2021' AND age >= 20 AND age <= 29;
3) 조건에 부합하는 중고거래 댓글 조회하기
- USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요. 결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요
SELECT a.TITLE, a.BOARD_ID, b.REPLY_ID, b.WRITER_ID, b.CONTENTS,
to_char(b.CREATED_DATE, 'yyyy-mm-dd') CREATED_DATE
FROM USED_GOODS_BOARD a, USED_GOODS_REPLY b
WHERE a.BOARD_ID = b.BOARD_ID
AND a.CREATED_DATE
BETWEEN TO_DATE('2022-10-01', 'yyyy-mm-dd') and TO_DATE('2022-10-31','yyyy-mm-dd')
ORDER BY b.CREATED_DATE ASC, a.TITLE ASC
SELECT A.TITLE, A.BOARD_ID, B.REPLY_ID, B.WRITER_ID, B.CONTENTS, TO_CHAR(B.CREATED_DATE, 'YYYY-MM-DD') CREATED_DATE
FROM USED_GOODS_BOARD A, USED_GOODS_REPLY B
WHERE A.BOARD_ID=B.BOARD_ID AND TO_CHAR(A.CREATED_DATE, 'YYYY-MM')='2022-10'
ORDER BY B.CREATED_DATE ASC, A.TITLE ASC;
- 작성일 서식 지정: to_char(b.CREATED_DATE, 'yyyy-mm-dd') CREATED_DATE
- 각 테이블 별칭 짓기: FROM USED_GOODS_BOARD a, USED_GOODS_REPLY b
- 각 두 테이블 매칭 시키기: WHERE a.BOARD_ID = b.BOARD_ID
- CREATED_DATE 가 2022 10월에 해당하는 데이터:
BETWEEN to_date('2022-10-01', 'yyyy-mm-dd') AND to_date('2022-10-31','yyyy-mm-dd')
4) 12세 이하인 여자 환자 목록 출력하기
- PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO,'NONE')
FROM PATIENT
WHERE AGE<=12 AND GEND_CD='W'
ORDER BY AGE DESC, PT_NAME
- IFNULL(TLNO,'NONE') → 전화 번호가 없으면 NONE으로 출력
SELECT IFNULL(Column명, "Null일 경우 대체 값") FROM 테이블명;
- 결과 정렬시 사용: ORDER BY
5) 인기있는 아이스크림
- 상반기에 판매된 아이스크림의 맛을 총주문량을 기준으로 내림차순 정렬하고 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여 조회하는 SQL 문을 작성해주세요
SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID
- ORDER BY: 정렬
6) 평균 일일 대여 요금 구하기
- CAR_RENTAL_COMPANY_CAR 테이블에서 자동차 종류가 'SUV'인 자동차들의 평균 일일 대여 요금을 출력하는 SQL문을 작성해주세요. 이때 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림하고, 컬럼명은 AVERAGE_FEE 로 지정해주세요
SELECT ROUND(AVG(DAILY_FEE)) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE='SUV';
- ROUND(AVG(DAILY_FEE)): ROUND로 반올림 진행
7) 조건에 맞는 도서 리스트 출력하기
- BOOK 테이블에서 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트를 찾아서 도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력하는 SQL문을 작성해주세요. 결과는 출판일을 기준으로 오름차순 정렬해주세요
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%M-%D') AS PUBLISHED_DATE
FROM BOOK
WHERE CATEGORY='인문' AND YEAR(PUBLISHED_DATE)= 2021
ORDER BY PUBLISHED_DATE;
BOOK_IDPUBLISHED_DATE
3 | 2021-October-24th |
- DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d')
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK
WHERE CATEGORY='인문' AND YEAR(PUBLISHED_DATE)= 2021
ORDER BY PUBLISHED_DATE;
BOOK_IDPUBLISHED_DATE
3 | 2021-10-24 |
8) 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_OF_BIRTH like '%-03-%' and TLNO is not null
order by MEMBER_ID
- 외우기!!
date_format(컬럼명, %Y-%m-%d) as 별칭
WHERE 컬렴명 like '%-03-%'
9) 과일로 만든 아이스크림 고르기
- 상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL 문을 작성해주세요
SELECT A.FLAVOR
FROM FIRST_HALF A, ICECREAM_INFO B
WHERE TOTAL_ORDER > 3000
AND INGREDIENT_TYPE = 'fruit_based'
AND A.FLAVOR = B.FLAVOR
ORDER BY TOTAL_ORDER DESC;
→ FIRST_HALF 테이블과 ICECREAM_INFO 테이블에서 TOTAL_ORDER가 3000보다 크고, INGREDIENT_TYPE이 '과일 기반'이며, 두 테이블의 FLAVOR가 일치하는 행의 FLAVOR를 가져옵니다. 그리고 결과는 TOTAL_ORDER 열을 기준으로 내림차순으로 정렬
10) 과일로 만든 아이스크림 고르기
- 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
- SELECT USER_ID, PRODUCT_ID: 이는 ONLINE_SALE 테이블에서 USER_ID와 PRODUCT_ID 열을 선택하도록 지정하는 부분입니다.
- FROM ONLINE_SALE: 이는 데이터를 가져올 ONLINE_SALE 테이블을 지정하는 부분입니다.
- GROUP BY USER_ID, PRODUCT_ID: 이는 USER_ID와 PRODUCT_ID 열을 기준으로 그룹화하는 부분입니다.
- HAVING COUNT(*) >=2: 이는 그룹화된 결과에서 행의 개수가 2 이상인 조건을 추가합니다.
- ORDER BY USER_ID, PRODUCT_ID DESC: 이는 결과를 USER_ID를 기준으로 오름차순으로 정렬하고, PRODUCT_ID를 기준으로 내림차순으로 정렬하도록 지정합니다.