SELECT
12세 이하인 여자 환자 목록 출력하기(Lv1)
문제 설명
문제
PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요.
풀이
SELECT로 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회
전화번호가 없다면 NONE으로 출력하기 위해 IFNULL 함수 사용
WHERE문에서 나이는 12 이하, 성별은 여자로 설정
ORDER BY에서 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, 'NONE') TLNO
FROM PATIENT
WHERE AGE <=12
AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME;
SUM, MAX, MIN
동물수 구하기(Lv2)
문제 설명
문제
동물 보호소에 동물이 몇 마리 들어왔는지 조회하는 SQL 문을 작성해주세요.
풀이
SELECT에서 COUNT(*)로 집계해서 조회
SELECT COUNT(*)
FROM ANIMAL_INS;
GROUP BY
성분으로 구분한 아이스크림 총 주문량(Lv2)
문제 설명
문제
상반기 동안 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총주문량을 총주문량이 작은 순서대로 조회하는 SQL 문을 작성해주세요. 이때 총주문량을 나타내는 컬럼명은 TOTAL_ORDER로 지정해주세요.
풀이
SELECT에서 아이스크림 성분과 총주문량의 합을 조회
JOIN에서 맛을 기준으로 연결
GROUP BY에서 아이스크림 성분을 기준으로 총주문량을 계산하기 위해 성분을 기준으로 그룹화
ORDER BY에서 총주문량이 작은 것부터 나오기 위해 오름차순 정렬
SELECT I.INGREDIENT_TYPE, SUM(TOTAL_ORDER) TOTAL_ORDER
FROM FIRST_HALF F
JOIN ICECREAM_INFO I ON I.FLAVOR = F.FLAVOR
GROUP BY I.INGREDIENT_TYPE
ORDER BY TOTAL_ORDER;
IS NULL
나이 정보가 없는 회원수 구하기(Lv1)
문제 설명
문제
USER_INFO 테이블에서 나이 정보가 없는 회원이 몇 명인지 출력하는 SQL문을 작성해주세요. 이때 컬럼명은 USERS로 지정해주세요.
풀이
SELECT에서 나이 정보가 없는 회원수 알기위해 COUNT(*)으로 숫자 집계
WHERE에서 나이 정보가 없는 회원으로 제한
SELECT COUNT(*)
FROM USER_INFO
WHERE AGE IS NULL;
JOIN
그룹별 조건에 맞는 식당 목록 출력하기(Lv4)
문제 설명
문제
MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬해주세요.
풀이
SELECT에서 회원 이름, 리뷰 텍스트, 리뷰 작성일 조회 (리뷰 작성일은 원하는 조건에 맞추기 위해 DATE_FORMAT 사용)
두 테이블을 모두 사용해야하므로, 공통 컬럼인 MEMBER_ID로 JOIN
WHERE에서 리뷰를 가장 많이 작성한 회원으로 제한하기 위한 서브쿼리문 작성
ORDER BY에서 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬
SELECT
M.MEMBER_NAME, R.REVIEW_TEXT, DATE_FORMAT(R.REVIEW_DATE, '%Y-%m-%d')
FROM MEMBER_PROFILE M
JOIN REST_REVIEW R ON M.MEMBER_ID = R.MEMBER_ID
WHERE M.MEMBER_ID = (
SELECT MEMBER_ID
FROM REST_REVIEW
GROUP BY MEMBER_ID
ORDER BY COUNT(*) DESC
LIMIT 1
)
ORDER BY R.REVIEW_DATE, R.REVIEW_TEXT;
String, Date
조건별로 분류하여 주문상태 출력하기(Lv3)
문제 설명
문제
FOOD_ORDER 테이블에서 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회하는 SQL문을 작성해주세요. 출고여부는 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력해주시고, 결과는 주문 ID를 기준으로 오름차순 정렬해주세요.
풀이
SELECT에서 주문 ID, 제품 ID, 출고일자, 출고여부를 조회
OUT_DATE의 경우 원하는 조건으로 만들기 위해 DATE_FORMAT을 사용
출고여부 판단하기 위해 CASE WHEN으로 조건 설정
- OUT_DATE가 null인 경우 '출고미정'
- OUT_DATE가 2022-05-02 미만이라면 '출고완료'
- 나머지는 '출고대기'
SELECT
ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE, '%Y-%m-%d') OUT_DATE,
CASE
WHEN OUT_DATE IS NULL THEN '출고미정'
WHEN OUT_DATE < '2022-05-02' THEN '출고완료'
ELSE '출고대기'
END AS '출고여부'
FROM FOOD_ORDER;
'SQL > 프로그래머스' 카테고리의 다른 글
프로그래머스 | SQL 스터디 7 (0) | 2024.09.03 |
---|---|
프로그래머스 | SQL 스터디 6 (0) | 2024.09.03 |
프로그래머스 | SQL 스터디 4 (1) | 2024.09.03 |
프로그래머스 | SQL 스터디 3 (2) | 2024.09.03 |
프로그래머스 | SQL 스터디 2 (0) | 2024.09.03 |