본문 바로가기

코딩테스트/SQL - 프로그래머스

(31)
SQL 고득점 kit(GROUP BY) - 년, 월, 성별 별 상품 구매 회원 수 구하기 -- 풀이 쿼리 SELECT YEAR(O.SALES_DATE) AS YEAR , MONTH(O.SALES_DATE) AS MONTH , U.GENDER , COUNT(DISTINCT U.USER_ID) AS USERS FROM USER_INFO U JOIN ONLINE_SALE O ON U.USER_ID = O.USER_ID WHERE GENDER IS NOT NULL GROUP BY YEAR, MONTH, GENDER ORDER BY YEAR, MONTH, GENDER - Lv 4 짜리 문제였지만 그다지 어려운 문제는 아니다. 조건만 잘 맞춰주면 된다. - 단, 풀이에서 사용한 YEAR(), MONTH()등의 함수는 MySQL 외에 다른 DBMS에선 안 먹힐 수도 있으니, EXTRACT나 DATE_TR..
SQL 고득점 kit(GROUP BY) - 식품분류별 가장 비싼 식품의 정보 조회하기 # 풀이 쿼리 SELECT CATEGORY , PRICE AS MAX_PRICE , PRODUCT_NAME FROM ( SELECT CATEGORY , PRICE , PRODUCT_NAME , DENSE_RANK() OVER (PARTITION BY CATEGORY ORDER BY PRICE DESC) AS RANKING FROM FOOD_PRODUCT WHERE CATEGORY IN ('과자', '국', '식용유', '김치') ) AS B WHERE RANKING = 1 ORDER BY MAX_PRICE DESC 1. 카테고리 별 금액 기준으로 순서를 매긴 후 2. 1등인 품목들만 가져온다. 그리 어렵진 않았다. 그런 만큼, 서너개의 풀이법이 더 있을 것으로 예상한다.
SQL 고득점 kit(GROUP BY) - 성분으로 구분한 아이스크림 총 주문량 -- 정답 쿼리 SELECT I.INGREDIENT_TYPE , SUM(TOTAL_ORDER) AS TOTAL_ORDER FROM FIRST_HALF F LEFT JOIN ICECREAM_INFO I ON F.FLAVOR = I.FLAVOR GROUP BY I.INGREDIENT_TYPE LEVEL 2 다운 쉬운 문제였다. 해설은 따로 하지 않는다.
SQL 고득점 kit(GROUP BY) - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 # 풀이 쿼리 SELECT EXTRACT(MONTH FROM START_DATE) AS MONTH , CAR_ID , COUNT(*) AS RECORDS FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31' GROUP BY MONTH, CAR_ID HAVING CAR_ID IN ( 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(*) >= 5 ) ORDER BY MONTH, CAR_ID DESC; ..
문제풀이 자동으로 Github에 연동하기 Leetcode에서 코딩테스트 문제를 풀 때, 자동으로 문제 풀이를 Github에 연동해주는 Leetsync라는 프로그램을 애용했다. 사실 애용했다기보단 한 번 연동 걸어두고 그냥 문제만 풀었을 뿐이지만... 어쨌든 자동으로 Github에 올려주었으니 굉장히 유용했던 프로그램이었는데.. 이제 Leetcode의 SQL문제는 다 풀어서 프로그래머스로 옮겨오고, 귀찮지만 하나하나 Github에 올려야 하나 말아야 하나고민하던 찰나! Leetsync처럼 Github 자동 연동프로그램을 발견! 바로 설치해주었다. 이 얼마나 편리한가... 이 편리함을 공유하고자 한다. 개발자들께 경의를. Chrome 브라우저에서 실행하도록 하자. 다른 브라우저에서도 가능한지는 잘 모르겠다. 1. Chrome 웹스토어 -> 확장 프..
SQL 고득점 kit(GROUP BY) - 진료과별 총 예약 횟수 출력하기 # 풀이 쿼리 SELECT MCDP_CD AS '진료과코드' , COUNT(APNT_NO) AS '5월예약건수' FROM APPOINTMENT WHERE APNT_YMD BETWEEN '2022-05-01 00:00:00' AND '2022-05-31 23:59:59' GROUP BY MCDP_CD ORDER BY 5월예약건수, 진료과코드; 처음엔 예약 취소여부가 N이라는 조건을 넣었었다. 취소되었으면 그건 예약 한게 아니지 않은가? 그런데 아무리 봐도 틀릴 리가 없는 쿼리인데 계속 틀리더라... 혹시나 싶어서 해당 조건을 빼니 바로 ACCEPT되었다. 문제에서 조건을 좀 더 명확하게 했어야 하는 것이 아닌가... 싶다.
SQL 고득점 kit(GROUP BY) - 저자 별 카테고리 별 매출액 집계하기 -- 풀이 -- '2022년 1월', '저자 별 카테고리 별 매출액', '저자 ID 오름차순, 카테고리 내림차순' SELECT B.AUTHOR_ID , A.AUTHOR_NAME , B.CATEGORY , SUM(B.PRICE*BS.SALES) AS TOTAL_SALES FROM BOOK_SALES BS LEFT JOIN BOOK B ON BS.BOOK_ID = B.BOOK_ID LEFT JOIN AUTHOR A ON B.AUTHOR_ID = A.AUTHOR_ID WHERE YEAR(BS.SALES_DATE) = '2022' AND MONTH(BS.SALES_DATE) = '1' GROUP BY A.AUTHOR_NAME, B.CATEGORY ORDER BY A.AUTHOR_ID, B.CATEGORY DES..
SQL 고득점 kit(GROUP BY) - 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 -- 풀이(1) SELECT CAR_TYPE , COUNT(CAR_TYPE) AS CARS FROM CAR_RENTAL_COMPANY_CAR WHERE OPTIONS LIKE '%통풍시트%' OR OPTIONS LIKE '%열선시트%' OR OPTIONS LIKE '%가죽시트%' GROUP BY CAR_TYPE ORDER BY CAR_TYPE; - 해설 CAR_TYPE별로 "통풍시트, 열선시트, 가죽시트 중 하나 이상의 옵션이 포함된"이라는 조건을 잘 작성하고, 그 외 자동차 종류를 기준으로 오름차순이라는 기준만 잘 보고 작성하면 되는 문제였다 * 다른 풀이 LIKE가 아닌 REGEXP 연산자를 사용해서 푸는 것도 가능하다. [STUDY/SQL] - MYSQL - REGEXP(REGular EXPress..