65. 우유와 요거트가 담긴 장바구니

문제 링크:

정답 코드: https://school.programmers.co.kr/learn/courses/30/lessons/62284

SELECT a.CART_ID
FROM CART_PRODUCTS a
INNER JOIN CART_PRODUCTS b
ON a.CART_ID = b.CART_ID
WHERE a.NAME = 'Milk' AND b.NAME = 'Yogurt'
GROUP BY a.CART_ID
ORDER BY CART_ID ASC

문제 풀이때 했던 생각.

# 우유와 요거트를 동시에 구입한 장바구니
# 아이디를 조회
# 결과는 장바구니의 아이디 순

CART_ID 행 하나에 주문데이터가 모두 담겨져 있는것이 아니기 때문에 GROUP BY로 그룹으로 만듬

# 다양한 풀이방법이 존재하니 하나씩 시도해볼것

 


66. 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/164671

정답 코드:

SELECT CONCAT("/home/grep/src/", b.BOARD_ID,"/",f.FILE_ID,f.FILE_NAME,f.FILE_EXT) AS FILE_PATH
FROM USED_GOODS_BOARD b
INNER JOIN USED_GOODS_FILE f
ON b.BOARD_ID = f.BOARD_ID
WHERE b.VIEWS = (SELECT MAX(VIEWS) FROM USED_GOODS_BOARD )
ORDER BY FILE_ID DESC

 

문제 풀이때 했던 생각.

# 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회
# 기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분
# 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력
# 조회수가 가장 높은 게시물은 하나만 존재한다.
# 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬

만약 LIMIT을 사용해 가장 높은 조회수의 게시물을 찾을 경우
해당 게시물에 있는 또 다른 파일도 제거를 하기 때문에 사용하면 안된다,

 


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

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/133027

정답 코드:

WITH J AS 
(   SELECT FLAVOR, 
    SUM(TOTAL_ORDER) AS TOTAL_ORDER
    FROM JULY
    GROUP BY FLAVOR) # 7월 주문량 합산
SELECT F.FLAVOR
FROM FIRST_HALF F
LEFT JOIN J
ON F.FLAVOR = J.FLAVOR
ORDER BY (F.TOTAL_ORDER + IFNULL(J.TOTAL_ORDER, 0)) DESC
LIMIT 3

문제 풀이때 했던 생각.

# 7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 더한 값
# 큰 순서대로 상위 3개의 맛

7월 주문량을 먼저 합산 한뒤 JOIN, 총 주문량을 구해야 하기 때문에 LEFT JOIN
상반기엔 판매되었으니 7월엔 판매가 안된 제품이 있을수 있기 때문에 IFNULL을 사용해 NULL을 0으로 치환

 

+ Recent posts