SELECT
조건에 부합하는 중고거래 댓글 조회하기(Lv1)
문제 설명
문제
USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요. 결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요.
풀이
SELECT로 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회
JOIN에서 BOARD_ID로 두 테이블을 inner join
WHERE문에서 2022년 10월에 작성된 게시글로 조건 설정
※ 댓글이 아닌 게시글의 조건임을 기억하기기!
ORDER BY에서 댓글 작성일을 기준으로 오름차순 정렬, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬
SELECT B.TITLE , R.BOARD_ID, REPLY_ID, R.WRITER_ID, R.CONTENTS, DATE_FORMAT(R.CREATED_DATE,'%Y-%m-%d') CREATED_DATE
FROM USED_GOODS_REPLY R
JOIN USED_GOODS_BOARD B ON B.BOARD_ID = R.BOARD_ID
WHERE DATE_FORMAT(B.CREATED_DATE,'%Y-%m-%d') LIKE '2022-10%'
ORDER BY CREATED_DATE, B.TITLE;
SUM, MAX, MIN
중복 제거하기(Lv2)
문제 설명
문제
동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.
풀이
SELECT에서 DISTINCT로 중복이 되는 것들을 제외하고 COUNT하여 집계
WHERE에서 NAME이 NULL인 것은 집계하지 않기 위해 WHERE NAME IS NOT NULL 사용
SELECT COUNT(DISTINCT NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL;
GROUP BY
즐겨찾기가 가장 많은 식당 정보 출력하기(Lv3)
문제 설명
문제
REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
풀이
SELECT에서 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회
WHERE에서 서브쿼리로 FOOD_TYPE을 GROUP BY하고, FOOD_TYPE과 FAVORITES의 최대값을 전체구문의 FOOD_TYPE과 FAVORITES으로 설정
ORDER BY에서 음식 종류를 기준으로 내림차순 정렬
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE,FAVORITES) IN (
SELECT FOOD_TYPE, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
)
ORDER BY FOOD_TYPE DESC;
IS NULL
ROOT 아이템 구하기(Lv2)
문제 설명
문제
ROOT 아이템을 찾아 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME)을 출력하는 SQL문을 작성해 주세요. 이때, 결과는 아이템 ID를 기준으로 오름차순 정렬해 주세요.
풀이
설명이 길어서 그렇지 요약하면, ITEM_TREE 테이블에서 PARENT_ITEM_ID가 NULL인 것의 ITEM_ID와 ITEM_NAME을 구하라는 것!
SELECT에서 ITEM_ID와 ITEM_NAME을 조회
JOIN에서 ITEM_ID를 기준으로 inner join
WHERE에서 T.PARENT_ITEM_ID IS NULL을 설정
ORDER BY에서 아이템 ID를 기준으로 오름차순 정렬
SELECT I.ITEM_ID, ITEM_NAME
FROM ITEM_INFO I
JOIN ITEM_TREE T ON T.ITEM_ID = I.ITEM_ID
WHERE T.PARENT_ITEM_ID IS NULL
ORDER BY ITEM_ID;
JOIN
없어진 기록찾기(Lv3)
문제 설명
문제
천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.
풀이
SELECT에서 ANIMAL_ID, NAME을 조회
WHERE에서 서브쿼리로 INS테이블의 ANIMAL_ID가 들어있지 않은 ANIMAL_ID로 제한
(→입양을 간 기록은 있지만, 보호소에 들어온 기록이 없는 동물ID)
SELECT ANIMAL_ID, NAME
FROM ANIMAL_OUTS
WHERE ANIMAL_ID NOT IN
(SELECT ANIMAL_ID
FROM ANIMAL_INS);
String, Date
조건에 맞는 사용자 정보 조회하기(Lv3)
문제 설명
문제
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요.
풀이
SELECT에서 회원 ID, 별명, 전체주소(시, 상세주소1, 상세주소2를 결합), 전화번호(TLNO에서 '-'를 추가한 버전) 조회
JOIN에서 USER_ID와 WRITER_ID가 같은 칼럼이므로 두 테이블을 연결
GROUP BY에서 USER_ID를 그룹화
HAVING에서 거래 게시물 3건 이상의 조건을 걸기 위해 COUNT(*) >=3 을 설정
ORDER BY에서 회원 ID를 기준으로 내림차순 정렬
SELECT
USER_ID, NICKNAME,
CONCAT(CITY,' ', STREET_ADDRESS1, ' ', STREET_ADDRESS2) 전체주소,
CONCAT(
SUBSTRING(TLNO, 1, 3),'-',
SUBSTRING(TLNO, 4, 4),'-',
SUBSTRING(TLNO, 8)
) 전화번호
FROM USED_GOODS_USER U
JOIN USED_GOODS_BOARD B ON U.USER_ID = B.WRITER_ID
GROUP BY USER_ID
HAVING COUNT(*) >= 3
ORDER BY USER_ID DESC;
'SQL > 프로그래머스' 카테고리의 다른 글
프로그래머스 | SQL 스터디 8 (0) | 2024.09.03 |
---|---|
프로그래머스 | SQL 스터디 7 (0) | 2024.09.03 |
프로그래머스 | SQL 스터디 5 (0) | 2024.09.03 |
프로그래머스 | SQL 스터디 4 (1) | 2024.09.03 |
프로그래머스 | SQL 스터디 3 (2) | 2024.09.03 |