SQL 45

[MySQL] 프로그래머스 - 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

& & 테이블 구조 SELECT DISTINCT(C.CAR_ID), C.CAR_TYPE, ROUND(DAILY_FEE * 30 - (DAILY_FEE * 30 * (DISCOUNT_RATE/100))) AS FEE FROM CAR_RENTAL_COMPANY_CAR AS C JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS H ON C.CAR_ID = H.CAR_ID JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS P ON C.CAR_TYPE = P.CAR_TYPE WHERE C.CAR_ID not in (SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE BETWEEN '2022-1..

IT/SQL 2024.01.29

[MySQL] 프로그래머스 - 오프라인/온라인 판매 데이터 통합하기

& 테이블 구조 SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT FROM ONLINE_SALE WHERE YEAR(SALES_DATE) = '2022' AND MONTH(SALES_DATE) = '3' 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 YEAR(SALES_DATE) = '2022' AND MONTH(SALES_DATE) = '3' ORDER BY SALES_DATE ASC, PRODUCT..

IT/SQL 2024.01.29

[MySQL] 프로그래머스 - 그룹별 조건에 맞는 식당 목록 출력하기

& 테이블 구조 SELECT MEMBER_NAME, REVIEW_TEXT, DATE_FORMAT(REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE FROM MEMBER_PROFILE AS P JOIN REST_REVIEW AS R ON P.MEMBER_ID = R.MEMBER_ID WHERE P.MEMBER_ID = (SELECT MEMBER_ID FROM REST_REVIEW GROUP BY MEMBER_ID ORDER BY COUNT(*) DESC LIMIT 1) ORDER BY 3 asc, 2 asc; 첫 번째로는 리뷰를 가장 많이 작성한 회원이 누구인지를 찾는 쿼리를 작성해야한다. 그래서 리뷰 테이블에서 member_id로 그룹화 해준 후 지난번 문제처럼 ORDER절에 집계 ..

IT/SQL 2024.01.29

[MySQL] 프로그래머스 - 저자 별 카테고리 별 매출액 집계하기

& & 테이블 구조 SELECT A.AUTHOR_ID, AUTHOR_NAME, CATEGORY, sum((SALES * PRICE)) AS TOTAL_SALES FROM BOOK_SALES AS BS JOIN BOOK AS B ON BS.BOOK_ID = B.BOOK_ID JOIN AUTHOR AS A ON B.AUTHOR_ID = A.AUTHOR_ID WHERE YEAR(BS.SALES_DATE) = 2022 AND MONTH(BS.SALES_DATE) = 1 GROUP BY A.AUTHOR_ID, AUTHOR_NAME, CATEGORY ORDER BY A.AUTHOR_ID, CATEGORY DESC 3개 이상의 테이블 JOIN과 복수의 그룹핑을 해야하는 문제였다. 다양한 데이터가 주어져도 당황하지 않..

IT/SQL 2024.01.25

[MySQL] 프로그래머스 - 우유와 요거트가 담긴 장바구니

테이블 구조 SELECT CART_ID FROM CART_PRODUCTS WHERE NAME in ('Milk', 'Yogurt') GROUP BY CART_ID HAVING count(DISTINCT NAME) = 2 where 절에 name 컬럼에 우유와 요거트가 있는 아이디들만 우선 필터링하였다. 그 후 count가 2개 이상인 ID는 (우유와 요거트가 둘다 있는) 한개만 출력되게 DISTINCT 를 걸어서 하나만 나오게 조건을 걸어 두었다. 출처 : 프로그래머스 - 우유와 요거트가 담긴 장바구니

IT/SQL 2024.01.25

[MySQL] 프로그래머스 - 서울에 위치한 식당 목록 출력하기

& 테이블 구조 SELECT R.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, round(avg(review_score), 2) as score FROM REST_INFO AS I JOIN REST_REVIEW AS R ON I.REST_ID = R.REST_ID WHERE ADDRESS LIKE '서울%' group by REST_ID ORDER BY SCORE DESC, FAVORITES DESC; 우선 두 테이블을 내부조인을 한 후, 각 식당별 평균에 대한 값을 구하기 위해 SELECT 절에 집계함수를 이용하였다. 계속 문제를 틀리길래 이것 저것 시도해보다가 결국 다른 블로그를 보았다.. 그런데 원인은 사실 WHERE 절이었다.. 나는 서울특별시 로 하고..

IT/SQL 2024.01.25

[MySQL] 프로그래머스 - 년, 월, 성별 별 상품 구매 회원 수 구하기

& 테이블 구조 SELECT YEAR(SALES_DATE) AS YEAR, MONTH(SALES_DATE) AS MONTH, GENDER, COUNT(DISTINCT A.USER_ID) AS USER FROM USER_INFO AS A JOIN ONLINE_SALE AS B ON A.USER_ID = B.USER_ID WHERE GENDER IS not null GROUP BY 1,2,3 ORDER BY 1,2,3 ASC 판매일과 성별로 결과셋을 정렬하고 그 정렬 컬럼별로 구매 회원 수를 집계하는 문제이다. 판매일의 날짜를 위해 SELECT 절에 날짜 함수를 이용하였다. 젠더는 그냥 0과 1로 나타내었다. (만약 다른값으로 보여달라하면 case 구문 이용!) 구매 회원수의 값을 구하기 위해 처음엔 그냥 ..

IT/SQL 2024.01.25

[MySQL] 프로그래머스 - 취소되지 않은 진료 예약 조회하기

& & 테이블 구조 SELECT A.APNT_NO, P.PT_NAME, A.PT_NO, A.MCDP_CD, D.DR_NAME, A.APNT_YMD FROM APPOINTMENT AS A JOIN PATIENT AS P ON A.PT_NO = P.PT_NO JOIN DOCTOR AS D ON A.MDDR_ID = D.DR_ID WHERE DATE(A.APNT_YMD) = '2022-04-13' AND A.APNT_CNCL_YN = 'N' AND A.MCDP_CD = 'CS' ORDER BY A.APNT_YMD ASC; 드디어 3개 이상의 테이블을 조인 하는 문제가 나왔다. 그래서 그런지 문제에서 요구하는 조건 자체는 구현하는데 쿼리가 복잡하지 않았다. 다만 WHERE 절에 A.APNT_YMD 형식이 시분초..

IT/SQL 2024.01.24