[TIL]_2025.03.04 본캠프 16일차 (1): 코드카타 SQL

JIYUU·2025년 3월 4일

51번. 없어진 기록 찾기
ANIMAL_INS, ANIMAL_OUTS 테이블을 이용
천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.

SELECT 
	AO.ANIMAL_ID,
    AO.NAME
FROM 
	ANIMAL_OUTS AO 
    LEFT JOIN ANIMAL_INS AI ON AO.ANIMAL_ID = AI.ANIMAL_ID
WHERE 
	AI.ANIMAL_ID IS NULL
ORDER BY 
	AO.ANIMAL_ID;

52번. 과일로 만든 아이스크림 고르기
다음은 아이스크림 가게의 상반기 주문 정보를 담은 FIRST_HALF 테이블과 아이스크림 성분에 대한 정보를 담은 ICECREAM_INFO 테이블입니다. FIRST_HALF 테이블 구조는 다음과 같으며, SHIPMENT_ID, FLAVOR, TOTAL_ORDER 는 각각 아이스크림 공장에서 아이스크림 가게까지의 출하 번호, 아이스크림 맛, 상반기 아이스크림 총주문량을 나타냅니다. FIRST_HALF 테이블의 기본 키(PK)는 FLAVOR입니다.
ICECREAM_INFO 테이블 구조는 다음과 같으며, FLAVOR, INGREDITENT_TYPE 은 각각 아이스크림 맛, 아이스크림의 성분 타입을 나타냅니다. INGREDIENT_TYPE에는 아이스크림의 주 성분이 설탕이면 sugar_based라고 입력되고, 아이스크림의 주 성분이 과일이면 fruit_based라고 입력됩니다. ICECREAM_INFO의 기본 키는 FLAVOR입니다. ICECREAM_INFO테이블의 FLAVOR는 FIRST_HALF 테이블의 FLAVOR의 외래 키(FK)입니다.

SELECT
	F.FLAVOR
FROM
	FIRST_HALF F
INNER JOIN ICECREAM_INFO I ON
	F.FLAVOR = I.FLAVOR
WHERE
	F.TOTAL_ORDER > 3000
	AND I.INGREDIENT_TYPE LIKE 'FRUIT%'
ORDER BY
	TOTAL_ORDER DESC

53번. 재구매가 일어난 상품과 회원 리스트 구하기
다음은 어느 의류 쇼핑몰의 온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블 입니다.
ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며 ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다.
동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다. (*동일한 날짜에 한명의 회원은 한 종류의 상품에 대해서 주문을 한번만 했다는 뜻)
ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요.
결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.

  • 조회하려는 데이터: 재구매한 회원ID, 재구매한 상품ID
  • 조건: ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매 ->
    회원ID별, 상품ID별 구매 건 수 1 초과
  • 정렬: 회원 ID 기준 ASC, 상품 ID 기준 DESC
SELECT
	A.USER_ID,
	A.PRODUCT_ID
FROM
	(
		SELECT
			O.USER_ID,
			O.PRODUCT_ID,
			COUNT(O.PRODUCT_ID) AS SALES_CNT
		FROM
			ONLINE_SALE O
		GROUP BY
			O.USER_ID,
			O.PRODUCT_ID
	) AS A
WHERE
	A.SALES_CNT > 1
ORDER BY
	A.USER_ID ASC,
	A.PRODUCT_ID DESC;

54번. 최댓값 구하기
ANIMAL_INS 테이블을 이용하여 가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL문을 작성해주세요.

  • 조회하려는 데이터 : 보호 시작일
  • 조건: 보호 시작일이 가장 최근
SELECT
	DATETIME
FROM
	ANIMAL_INS
ORDER BY
	DATETIME DESC
LIMIT 1;

55번. 조건에 맞는 사용자 정보 조회하기
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요.

  • 조회하려는 데이터 : 사용자 ID, 닉네임, 전체 주소, 전화번호
  • 조건 : 중고 거래 3건 이상 등록한, 주소는 전체, 전화번호는 하이픈으로
  • 정렬 : 회원 ID DESC
SELECT
	UGU.USER_ID,
	UGU.NICKNAME,
	UGU.전체주소,
	UGU.전화번호
FROM(
		SELECT
			WRITER_ID,
			COUNT(BOARD_ID) AS ART_CNT
		FROM
			USED_GOODS_BOARD
		GROUP BY
			WRITER_ID
        HAVING ART_CNT > 2
	) AS UGB
LEFT JOIN
    (
		SELECT
			USER_ID,
			NICKNAME,
			CONCAT(CITY, ' ', STREET_ADDRESS1, ' ', STREET_ADDRESS2) AS '전체주소',
			CONCAT(SUBSTRING(TLNO, 1, 3), '-',
            SUBSTRING(TLNO, 4, 4), '-',
            SUBSTRING(TLNO, 8, 4)) AS '전화번호'
		FROM
			USED_GOODS_USER
	) AS UGU
ON
	UGB.WRITER_ID = UGU.USER_ID
ORDER BY UGU.USER_ID DESC;

0개의 댓글