MySQL 45

[MySQL] 프로그래머스 - 대여 기록이 존재하는 자동차 리스트 구하기

& 테이블 구조 SELECT C.CAR_ID FROM CAR_RENTAL_COMPANY_CAR AS C LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS H ON C.CAR_ID = H.CAR_ID WHERE CAR_TYPE = '세단' AND MONTH(START_DATE) = '10' GROUP BY CAR_ID ORDER BY CAR_ID DESC; 두 개의 테이블을 외부조인을 이용하여 값을 찾는 문제였다. 여기서 주의할 부분은 GROUP 절을 어떤 컬럼으로 지정해야 하는지, 그리고 where 절 조건을 선정하는 부분이었다. 출처 : 프로그래머스 - 대여 기록이 존재하는 자동차 리스트 구하기

IT/SQL 2024.01.23

[MySQL] 프로그래머스 - 조건에 맞는 사용자와 총 거래금액 조회하기

& 테이블 구조 SELECT USER_ID, NICKNAME, SUM(PRICE) AS TOTAL_SLAES FROM USED_GOODS_BOARD AS B JOIN USED_GOODS_USER AS U ON B.WRITER_ID = U.USER_ID WHERE B.STATUS = 'DONE' GROUP BY USER_ID HAVING SUM(PRICE) >= 700000 ORDER BY SUM(PRICE) ASC; 게시글 테이블 작성자의 아이디와 유저 테이블 아이디를 내부조인하여 게시글별 닉네임을 확인한다. 그 후 작성된 게시글 줄 판매 완료된 것들만 필터링 해주고, USER_ID 로 그룹화 하여 각 게시글의 가격을 합쳐 준다. 마지막으로 HAVING SUM(PRICE) >= 700000 GORUP 절..

IT/SQL 2024.01.20

[MySQL] 프로그래머스 - 있었는데요 없었습니다

& 테이블 구조 SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_INS AS A LEFT JOIN ANIMAL_OUTS AS O ON A.ANIMAL_ID = O.ANIMAL_ID WHERE timediff(A.DATETIME, O.DATETIME) > 0 ORDER BY A.DATETIME 보호 시작일이 입양일보다 더 빠르다면 TIMEDIFF( 들어온날, 입양된날) > 0 이 나오게 된다. 그러나 우선 각 동물의 행을 맞춰야 하기 때문에 LEFT JOIN 함수를 이용하여 각 동물 상태를 맞춰 주었다. 출처 : 프로그래머스 - 있었는데요 없었습니다

IT/SQL 2024.01.20

[MySQL] 프로그래머스 - 오랜 기간 보호한 동물(1)

& 테이블 구조 SELECT AI.NAME, AI.DATETIME FROM ANIMAL_INS AS AI LEFT JOIN ANIMAL_OUTS AS AO ON AI.ANIMAL_ID = AO.ANIMAL_ID WHERE AO.ANIMAL_ID IS NULL ORDER BY AI.DATETIME LIMIT 3; 입양을 못 간 동물리스트를 알아야 하는 문제이다. 입양을 못 갔다면 animal_outs 테이블에 ID 값이 없을 것이기 때문에 WHERE 절에 ISNULL 함수를 사용하여 필터링을 해주었다. 또한 NULL값을 가진 컬럼을 위해서 내부조인이 아닌 LEFT 함수를 사용하였다. * LEFT JOIN : 기준이 되는 테이블을 왼쪽에 두고 오른쪽에 JOIN 하는 함수를 붙임 (일치하는 값이 없다면 NUL..

IT/SQL 2024.01.20

[MySQL] 프로그래머스 - 카테고리 별 도서 판매량 집계하기

& 테이블 구조 SELECT B.CATEGORY AS CATEGORY, SUM(S.SALES) AS TOTAL_SALES FROM BOOK AS B JOIN BOOK_SALES AS S ON B.BOOK_ID = S.BOOK_ID WHERE S.SALES_DATE LIKE '2022-01%' GROUP BY B.CATEGORY ORDER BY B.CATEGORY ASC; 카테고리별 판매량을 구해야 하는 문제이다. 우선 두 테이블을 JOIN 해주었다. (카테고리와 판매량이 다른 테이블에 있기 때문!) 그 후 카테고리로 그룹화 시켜준후 SELECT 절에 SUM(S.SALES) 로 합계량을 구해준다. 또한 2021년 1월 의 판매량만 구해야하기 때문에 WHERE 절에 날짜 조건을 추가해주었다. 출처 : 프로그..

IT/SQL 2024.01.20

[MySQL] 프로그래머스 - 자동차 평균 대여 기간 구하기

테이블 구조 SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE,START_DATE)+1), 1) AS AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID HAVING AVERAGE_DURATION >= 7 ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC; AVERAGE_DURATION 을 계산하는 부분이 가장 어려운 부분이었다. DATEDIFF() 함수로 기간을 구한 후 1일을 더한 후 평균을 구해야 한다. (두 날짜 사이의 값을 구하기 때문에 1을 더하여 기간을 구해야한다!!) 그 후 각 CAR_ID 별 평균을 구해주고, 문제에서 요구하는 소수 점 2번째 자리에서 반올림..

IT/SQL 2024.01.18

[MySQL] 프로그래머스 - 조건에 부합하는 중고거래 상태 조회하기

테이블 구조 SELECT BOARD_ID, WRITER_ID, TITLE, PRICE, CASE WHEN STATUS = 'DONE' THEN '거래완료' WHEN STATUS = 'RESERVED' THEN '예약중' ELSE '판매중' END AS STATUS FROM USED_GOODS_BOARD WHERE CREATED_DATE = '2022-10-05' ORDER BY BOARD_ID DESC; CASE-WHEN-ELSE 구절이다. WHEN-THEN 후 추가로 더 조건을 붙이고 싶다면, (파이썬의 elif 처럼) 똑같이 반복해주면 된다. AND, END CASE 등 추가로 붙여서 넣어줄 것이 따로 없다는 뜻!! 출처 : 프로그래머스 - 조건에 부합하는 중고거래 상태 조회하기

IT/SQL 2024.01.18

[MySQL] 프로그래머스 - 재구매가 일어난 상품과 회원 리스트 구하기

테이블 구조 SELECT USER_ID, PRODUCT_ID FROM ONLINE_SALE GROUP BY USER_ID, PRODUCT_ID HAVING count(*) >= 2 ORDER BY USER_ID ASC, PRODUCT_ID DESC; 간단한 문제였다. 하지만 GROUP BY 절에 하나의 컬럼만 들어가야 하지 않나? 라는 내 실수를 다시 생각나게 해주는 문제였다... 출처 : 프로그래머스 - 재구매가 일어난 상품과 회원 리스트 구하기

IT/SQL 2024.01.18

[MySQL] 프로그래머스 - 가격대 별 상품 개수 구하기

테이블 구조 SELECT FLOOR(PRICE/10000) * 10000 AS PRICE_GROUP, count(*) AS PRODUCTS FROM PRODUCT GROUP BY PRICE_GROUP ORDER BY PRICE_GROUP; PRICE_GROUP 절을 만들어 내는것이 주요한 문제이다. floor함수를 이용 후 (소수 부분 없애주는 함수) *10,000 하여 각 가격별 그룹을 만들어 주었다. 다음 만들어낸 PRICE_GROUP 을 이용하영 그룹화 하여 행들을 묶어 주었다. * floor 함수 : 소수 첫째 자리에서 내려주는 함수 (내림) ex. floor(456.8) = 456 round (함수) : 소수 n-1번째 자리에서 반올림 해주는 함수 (반올림) ex. round(193.25 , 1..

IT/SQL 2024.01.18

[MySQL] 프로그래머스 - 성분으로 구분한 아이스크림 총 주문량

& 테이블 구조 SELECT II.INGREDIENT_TYPE, SUM(FH.TOTAL_ORDER) AS TOTAL_ORDER FROM FIRST_HALF AS FH JOIN ICECREAM_INFO AS II ON FH.FLAVOR = II.FLAVOR GROUP BY II.INGREDIENT_TYPE ORDER BY TOTAL_ORDER ASC; 상반기내 각 성분 타입별 총주문량을 구하는 문제이다. FLAVOR로 내부 조인을 한 후 위에 SELECT 절의 테이블 별칭들을 추가해준다. 성분 타입(ingredient_type)으로 그룹화 해주었다. 그 후 SELECT 절은 성분타입 기준으로 그룹화 되었을테니 sum(total_order) 함수를 사용하여 값을 구해준다. 문제를 풀면서 한줄 한줄 코드에 의..

IT/SQL 2024.01.18