Day47

강태훈·2026년 3월 10일

nbcamp TIL

목록 보기
47/58

코드카타 - sql

주문량이 많은 아이스크림들 조회하기

WITH TORDER AS (
    SELECT FLAVOR, SUM(TOTAL_ORDER) AS SUM
    FROM JULY
    GROUP BY FLAVOR
)

SELECT A.FLAVOR
FROM FIRST_HALF A
JOIN TORDER B
ON A.FLAVOR = B.FLAVOR
ORDER BY (A.TOTAL_ORDER + B.SUM) DESC
LIMIT 3
;

저자 별 카테고리 별 매출액 집계하기

WITH BOOKSALES AS (
    SELECT AUTHOR_ID, CATEGORY, (B.PRICE*SUM(S.SALES)) AS TOTAL_SALES
    FROM BOOK B
    JOIN BOOK_SALES S
    ON B.BOOK_ID = S.BOOK_ID
    WHERE SALES_DATE LIKE '2022-01%'
    GROUP BY B.BOOK_ID
)

SELECT A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY, SUM(B.TOTAL_SALES) AS TOTAL_SALES
FROM AUTHOR A
JOIN BOOKSALES B
ON A.AUTHOR_ID = B.AUTHOR_ID
GROUP BY A.AUTHOR_ID, B.CATEGORY
ORDER BY A.AUTHOR_ID ASC, B.CATEGORY DESC
;

대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

WITH TOTAL_COUNTS AS (
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
    WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
    GROUP BY CAR_ID
    HAVING COUNT(HISTORY_ID)>= 5
)

SELECT MONTH(A.START_DATE) AS MONTH, A.CAR_ID, COUNT(A.HISTORY_ID) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY A
JOIN TOTAL_COUNTS B
ON A.CAR_ID = B.CAR_ID
WHERE A.START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
GROUP BY MONTH(A.START_DATE), A.CAR_ID
HAVING COUNT(A.HISTORY_ID) != 0
ORDER BY MONTH(A.START_DATE) ASC, A.CAR_ID DESC
;

그룹별 조건에 맞는 식당 목록 출력하기

SET @MAX = (
    SELECT MEMBER_ID
    FROM REST_REVIEW 
    GROUP BY MEMBER_ID
    ORDER BY COUNT(REVIEW_ID) DESC
    LIMIT 1
);

SELECT A.MEMBER_NAME, B.REVIEW_TEXT, DATE_FORMAT(B.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE
FROM MEMBER_PROFILE A
JOIN REST_REVIEW B
ON A.MEMBER_ID = B.MEMBER_ID
WHERE A.MEMBER_ID = @MAX
ORDER BY B.REVIEW_DATE ASC, B.REVIEW_TEXT ASC
;

오프라인/온라인 판매 데이터 통합하기

SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE 
WHERE SALES_DATE LIKE '2022-03%'

UNION ALL

SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE 
WHERE SALES_DATE LIKE '2022-03%'
ORDER BY SALES_DATE ASC, PRODUCT_ID ASC, USER_ID ASC
;
SALES_DATEPRODUCT_IDUSER_IDSALES_AMOUNT
2022-03-011NULL2
2022-03-013NULL3
2022-03-014NULL1
2022-03-01441
2022-03-02222
2022-03-02363
2022-03-032NULL1
2022-03-03551
  • 분명 문제 상으로는 문자열 'NULL'로 표기하라고 되어있지만 NULL(공백)으로 제출해야 정답으로 인정됨...하

  • UNION: 컬럼이 같은 두 테이블을 수직으로 합침, 중복제거
    UNION ALL: 중복도 포함해서 합침

  • ALTER TABLE 테이블명: 테이블 편집, 아래 항목을 뒤에 붙여서 사용

    1. ADD 컬럼명 데이터형: 테이블에 컬럼을 추가, 뒤에 DEFALT 디폴트 값을 추가하여 디폴트 값 설정 가능
    2. MODIFY 컬럼명 데이터형: 컬럼 데이터 타입 변경
    3. DROP 컬럼명 바꿀_컬럼명 데이터형: 컬럼 삭제
    4. CHANGE/RENAME 컬럼명 데이터형: 컬럼 이름 변경
    5. RENAME TO 바꿀_테이블_이름: 테이블 이름 변경

근데 프로그래머스에서는 테이블을 변경이 불가능 -> ALTER TABLE못씀

0개의 댓글