Lv1. 12세 이하인 여자 환자 목록 출력하기
🗂️ 문제
PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요.
😎 내 풀이
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 PT_NAME, PT_NO, GEND_CD, AGE,
CASE
WHEN TLNO IS NULL THEN 'NONE'
ELSE TLNO
END AS TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME;
🧐 배운 점
- IFNULL(TLNO, 'NONE') as TLNO
- 첫 번째 매개변수가 NULL이면 두 번째 매개변수를 반환한다.
- as를 통해 컬럼명을 지정할 수 있다.
- CASE 표현식
- 조건에 따라 서로 다른 값을 반환한다.
- 실행 결과를 통해 컬럼 순서를 잘 확인하자.
- SELECT PT_NO, PT_NAME, GEND_CD, AGE, IFNULL(TLNO, 'NONE') as TLNO
- 출력 순서를 맞게 하지 않으면 틀렸다고 뜬다.
Lv1. 인기있는 아이스크림
🗂️ 문제
상반기에 판매된 아이스크림의 맛을 총주문량을 기준으로 내림차순 정렬하고 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여 조회하는 SQL 문을 작성해주세요.
😎 내 풀이
SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID
Lv1. 흉부외과 또는 일반외과 의사 목록 출력하기
🗂️ 문제
DOCTOR 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬해주세요.
😎 내 풀이
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, "%Y-%m-%d") as HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD = 'CS' or MCDP_CD = 'GS'
ORDER BY HIRE_YMD DESC, DR_NAME
🧐 배운 점
- DATE_FORMAT(HIRE_YMD, "%Y-%m-%d") as HIRE_YMD
- 날짜를 지정한 형식으로 출력한다.
- 첫 번째 파라미터에는 원하는 컬럼이나 데이터를 넣고 두 번째 파라미터 값에는 원하는 출력 형태의 포맷 문자열을 넣는다.
Lv1. 과일로 만든 아이스크림 고르기
🗂️ 문제
상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL 문을 작성해주세요.
😎 내 풀이
SELECT f.FLAVOR
FROM FIRST_HALF f
JOIN ICECREAM_INFO i ON f.FLAVOR = i.FLAVOR
WHERE f.TOTAL_ORDER > 3000 and i.INGREDIENT_TYPE = 'fruit_based'
ORDER BY f.TOTAL_ORDER DESC
🧐 배운 점
- JOIN ON
- FROM 절에 JOIN 문을 작성한다.
- ON 절 뒤에 조건을 작성한다.
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인 조건>
Lv1. 강원도에 위치한 생산공장 목록 출력하기
🗂️ 문제
FOOD_FACTORY 테이블에서 강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회하는 SQL문을 작성해주세요. 이때 결과는 공장 ID를 기준으로 오름차순 정렬해주세요.
😎 내 풀이
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도%'
ORDER BY FACTORY_ID
🧐 배운 점
- LIKE '강원도%'
- LIKE 연산자는 문자열의 패턴을 통해 문자열의 부분 일치를 검색하는 데 사용한다.
- 패턴에는 ( % )와 ( _ )가 사용되는데 ( % )는 '모든 문자'라는 의미이고 ( _ )는 '한 글자'라는 의미이다
- 주소에 강원도가 포함되어야 하는 조건을 만족시키기 위해 LIKE 연산자를 사용한다.
Lv1. 조건에 맞는 도서 리스트 출력하기
🗂️ 문제
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 PUBLISHED_DATE LIKE '2021%'
ORDER BY PUBLISHED_DATE
Lv1. 평균 일일 대여 요금 구하기
🗂️ 문제
CAR_RENTAL_COMPANY_CAR 테이블에서 자동차 종류가 'SUV'인 자동차들의 평균 일일 대여 요금을 출력하는 SQL문을 작성해주세요. 이때 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림하고, 컬럼명은 AVERAGE_FEE 로 지정해주세요.
😎 내 풀이
SELECT ROUND(AVG(DAILY_FEE), 0) as AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV'
🧐 배운 점
- ROUND(AVG(DAILY_FEE), 0)
- ROUND('수치값', '반올림 자릿수')을 통해 반올림한다.
Lv1. 조건에 부합하는 중고거래 댓글 조회하기
🗂️ 문제
USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요. 결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요.
😎 내 풀이
SELECT ugb.TITLE, ugb.BOARD_ID, ugr.REPLY_ID, ugr.WRITER_ID, ugr.CONTENTS, DATE_FORMAT(ugr.CREATED_DATE, '%Y-%m-%d') as CREATED_DATE
FROM USED_GOODS_BOARD ugb
JOIN USED_GOODS_REPLY ugr
ON ugb.BOARD_ID = ugr.BOARD_ID
WHERE ugb.CREATED_DATE LIKE '2022-10%'
ORDER BY ugr.CREATED_DATE, ugb.TITLE
Lv1. 모든 레코드 조회하기
🗂️ 문제
동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.
😎 내 풀이
SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
Lv1. 역순 정렬하기
🗂️ 문제
동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.
😎 내 풀이
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;
Lv1. 아픈 동물 찾기
🗂️ 문제
동물 보호소에 들어온 동물 중 아픈 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
😎 내 풀이
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID
Lv1. 어린 동물 찾기
🗂️ 문제
동물 보호소에 들어온 동물 중 젊은 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
젊은 동물은 INTAKE_CONDITION이 Aged가 아닌 경우를 뜻한다.
😎 내 풀이
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID
Lv1. 동물의 아이디와 이름
🗂️ 문제
동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요.
😎 내 풀이
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
Lv1. 여러 기준으로 정렬하기
🗂️ 문제
동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.
😎 내 풀이
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC
Lv1. 상위 n개 레코드
🗂️ 문제
동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.
😎 내 풀이
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
Limit 1
🧐 배운 점
- Limit 1
- Limit을 통해 출력되는 데이터의 수를 제한한다.
Lv1. 조건에 맞는 회원수 구하기
🗂️ 문제
USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.
😎 내 풀이
SELECT COUNT(*) FROM USER_INFO
WHERE AGE BETWEEN 20 AND 29 AND LEFT(JOINED,4) = 2021
SELECT COUNT(*) as USERS
FROM USER_INFO
WHERE JOINED LIKE '2021%' AND AGE >= 20 AND AGE <= 29
🧐 배운 점
- BETWEEN 20 AND 29
- 주어진 범위 내의 값을 선택한다.
- LEFT(JOINED,4) = 2021
- 문자열을 받아서 왼쪽부터 원하는 길이만큼 자르는 함수다.
Lv2. 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 TLNO IS NOT NULL AND SUBSTR(DATE_OF_BIRTH, 6, 7) = 3
ORDER BY MEMBER_ID
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 GENDER = 'W' AND TLNO IS NOT NULL;
🧐 배운 점
- SUBSTR(DATE_OF_BIRTH, 6, 7) = 3
- SUBSTR(문자열, 시작 위치, 길이)를 통해 문자열을 잘라서 값을 비교한다.
- MONTH(DATE_OF_BIRTH) = 3
- 날짜 데이터에서 월만 추출할 수 있다.
Lv2. 재구매가 일어난 상품과 회원 리스트 구하기
🗂️ 문제
ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.
😎 내 풀이
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(USER_ID) > 1
ORDER BY USER_ID, PRODUCT_ID DESC
🧐 배운 점
- GROUP BY USER_ID, PRODUCT_ID
- 유형별로 개수를 알고 싶을 때는 컬럼에 데이터를 그룹화 할 수 있는 GROUP BY를 사용한다.
- WHERE는 그룹화 하기 전의 조건이고, HAVING은 그룹화 후에 조건이다.
Lv4. 서울에 위치한 식당 목록 출력하기
🗂️ 문제
REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.
😎 내 풀이
SELECT ri.REST_ID, ri.REST_NAME, ri.FOOD_TYPE, ri.FAVORITES, ri.ADDRESS, ROUND(AVG(rr.REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO ri JOIN REST_REVIEW rr ON ri.REST_ID = rr.REST_ID
WHERE LEFT(ADDRESS, 2) = '서울'
GROUP BY rr.REST_ID
ORDER BY ROUND(AVG(rr.REVIEW_SCORE), 2) DESC, ri.FAVORITES DESC
Lv4. 오프라인/온라인 판매 데이터 통합하기
🗂️ 문제
ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요. OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요. 결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요.
😎 내 풀이
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE LEFT(SALES_DATE, 7) = '2022-03'
UNION
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE LEFT(SALES_DATE, 7) = '2022-03'
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
🧐 배운 점
- UNION
- 두 테이블을 수직결합할 때 사용한다.
- NULL AS USER_ID
- NULL로만 값이 채워진 컬럼을 생성할 때 사용한다.
'Algorithm > Programmers' 카테고리의 다른 글
[완전탐색] 프로그래머스 Lv2. 카펫 - Python (0) | 2024.03.21 |
---|---|
[완전탐색] 프로그래머스 Lv1. 모의고사 - Python (0) | 2024.03.19 |
[정렬] 프로그래머스 Lv.2 가장 큰 수 - Python (2) | 2024.03.16 |
[힙] 프로그래머스 Lv2. 더 맵게 - Python (0) | 2024.03.07 |
[스택/큐] 프로그래머스 Lv1. 같은 숫자는 싫어 - JAVA (0) | 2024.02.19 |