개인공부 개인공부
SQL_프로그래머스_잔챙이 잡은 수 구하기

SQL_프로그래머스_잔챙이 잡은 수 구하기

SQL_프로그래머스_잔챙이 잡은 수 구하기 풀이 -- MYSQL SELECT COUNT(1) AS FISH_COUNT FROM FISH_INFO WHERE LENGTH IS NULL; LENGTH 컬럼 값이 10cm 이하인 경우 NULL인 물고기 개수를 조회하는 문제 * 출처 https://school.programmers.co.kr/learn/courses/30/lessons/293258
SQL_프로그래머스_연도 별 평균 미세먼지 농도 조회하기

SQL_프로그래머스_연도 별 평균 미세먼지 농도 조회하기

SQL_프로그래머스_연도 별 평균 미세먼지 농도 조회하기 풀이 SELECT YEAR , ROUND(AVG(PM1), 2) AS PM10 , ROUND(AVG(PM2), 2) AS "PM2.5" FROM ( SELECT PM_VAL1 AS PM1 , PM_VAL2 AS PM2 , YEAR(YM) AS YEAR FROM AIR_POLLUTION WHERE LOCATION2 = '수원' ) T GROUP BY YEAR ORDER BY YEAR ASC; 수원지역의 년도별 평균 미세먼지/초미세먼지 오염도를 구하는 문제 개인적으로 날짜에서 date_format으로 년도를 추출해서 그룹화, 정렬했을 때 실행결과는 동일하나, 테스트 실패가 나옴 date_format을 사용하면 문자열 타입으로 결과가 나와서 오류 year를 사용하면 정수 타입으로 결과가 나옴 굳이 date_format을 사용하고 싶을 때 암묵적 형변환 : 년도에 정수(0)을 더해주기 명시적 형변환 : CAST함수 적용해주면 된다.
SQL_프로그래머스_식품분류별 가장 비싼 식품의 정보 조회하기

SQL_프로그래머스_식품분류별 가장 비싼 식품의 정보 조회하기

SQL_프로그래머스_식품분류별 가장 비싼 식품의 정보 조회하기 풀이 -- MYSQL, ORACLE SELECT T.CATEGORY , T.PRICE , T.PRODUCT_NAME FROM ( SELECT CATEGORY , PRICE , PRODUCT_NAME , RANK() OVER(PARTITION BY CATEGORY ORDER BY PRICE DESC) AS RN FROM FOOD_PRODUCT WHERE CATEGORY IN ('과자', '국', '김치', '식용유') ) T WHERE T.RN = 1 ORDER BY T.PRICE DESC; 식품분류별로 가격이 제일 비싼 식품을 찾는 문제 가장 비싼 식품을 구할 때 동일 (카테고리/가격)가 2개 이상이여도 문제가 없음을 확인했다. -- MYSQL, ORACLE SELECT T.CATEGORY , T.PRICE , T.PRODUCT_NAME FROM ( SELECT CATEGORY , PRICE , PRODUCT_NAME ,
SQL_프로그래머스_3월에 태어난 여성 회원 목록 출력하기

SQL_프로그래머스_3월에 태어난 여성 회원 목록 출력하기

SQL_프로그래머스_3월에 태어난 여성 회원 목록 출력하기 풀이 -- MYSQL SELECT MEMBER_ID , MEMBER_NAME , GENDER , DATE_FORMAT(DATE_OF_BIRTH, "%Y-%m-%d") AS DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE GENDER = "W" AND TLNO IS NOT NULL AND DATE_FORMAT(DATE_OF_BIRTH, "%m") = "03" ORDER BY MEMBER_ID ASC; -- ORACLE SELECT MEMBER_ID , MEMBER_NAME , GENDER , TO_CHAR(DATE_OF_BIRTH, 'YYYY-MM-DD') AS DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE GENDER = 'W' AND TLNO IS NOT NULL AND TO_CHAR(DATE_OF_BIRTH, 'MM') = '03' ORDER BY MEMBER_ID ASC;
SQL_프로그래머스_조건에 맞는 사용자와 총 거래금액 조회하기

SQL_프로그래머스_조건에 맞는 사용자와 총 거래금액 조회하기

SQL_프로그래머스_조건에 맞는 사용자와 총 거래금액 조회하기 풀이 -- MYSQL SELECT UGU.USER_ID , UGU.NICKNAME , SUM(UGB.PRICE) AS TOTAL_SALES FROM USED_GOODS_USER UGU LEFT OUTER JOIN USED_GOODS_BOARD UGB ON UGU.USER_ID = UGB.WRITER_ID WHERE UGB.STATUS = 'DONE' GROUP BY UGU.USER_ID, UGU.NICKNAME HAVING TOTAL_SALES >= 700000 ORDER BY TOTAL_SALES ASC; -- ORACLE SELECT UGU.USER_ID , UGU.NICKNAME , SUM(UGB.PRICE) AS TOTAL_SALES FROM USED_GOODS_USER UGU LEFT OUTER JOIN USED_GOODS_BOARD UGB ON UGU.USER_ID = UGB.WRITER_ID WHERE UGB
SQL_프로그래머스_조건에 맞는 도서 리스트 출력하기

SQL_프로그래머스_조건에 맞는 도서 리스트 출력하기

SQL_프로그래머스_조건에 맞는 도서 리스트 출력하기 풀이 -- MYSQL SELECT BOOK_ID , DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE FROM BOOK WHERE CATEGORY = '인문' AND DATE_FORMAT(PUBLISHED_DATE, '%Y') = '2021' ORDER BY PUBLISHED_DATE ASC; -- ORACLE SELECT BOOK_ID , TO_CHAR(PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE FROM BOOK WHERE CATEGORY = '인문' AND TO_CHAR(PUBLISHED_DATE, 'YYYY') = '2021' ORDER BY PUBLISHED_DATE ASC; CATEGORY가 '인문'이며 PUBLISHED_DATE가 2021로 시작하는 도서 찾기 PUBLISHED_DATE 출력 시 '0000-00-00'형식으로
SQL_프로그래머스_대여 기록이 존재하는 자동차 리스트 구하기

SQL_프로그래머스_대여 기록이 존재하는 자동차 리스트 구하기

SQL_프로그래머스_대여 기록이 존재하는 자동차 리스트 구하기 풀이 -- MYSQL SELECT DISTINCT CRCC.CAR_ID FROM CAR_RENTAL_COMPANY_CAR CRCC LEFT OUTER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY CRCRH ON CRCC.CAR_ID = CRCRH.CAR_ID AND CRCC.CAR_TYPE = '세단' WHERE DATE_FORMAT(CRCRH.START_DATE, '%m') = '10' ORDER BY CRCC.CAR_ID DESC; -- ORACLE SELECT DISTINCT CRCC.CAR_ID FROM CAR_RENTAL_COMPANY_CAR CRCC LEFT OUTER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY CRCRH ON CRCC.CAR_ID = CRCRH.CAR_ID AND CRCC.CAR_TYPE = '세단' WHERE TO_CHAR(CRCRH.STA
SQL_프로그래머스_상품 별 오프라인 매출 구하기

SQL_프로그래머스_상품 별 오프라인 매출 구하기

SQL_프로그래머스_상품 별 오프라인 매출 구하기 풀이 -- MYSQL, ORACLE SELECT P.PRODUCT_CODE , SUM(P.PRICE * OS.SALES_AMOUNT) AS SALES FROM PRODUCT P LEFT OUTER JOIN OFFLINE_SALE OS ON P.PRODUCT_ID = OS.PRODUCT_ID GROUP BY P.PRODUCT_CODE ORDER BY SALES DESC, P.PRODUCT_CODE ASC; 문제에서 PRODUCT_CODE의 앞 2자리가 카테고리 코드를 의미한다고 했는데, 문제 풀이상 중요하지 않음 PRODUCT_CODE를 그룹화하고 나머지 총 매출액을 매출액 기준 내림차순, 상품코드 기준 오름차순 정렬하는 풀이 * 출처 https://school.programmers.co.kr/learn/courses/30/lessons/131533
SQL_프로그래머스_조건별로 분류하여 주문상태 출력하기

SQL_프로그래머스_조건별로 분류하여 주문상태 출력하기

SQL_프로그래머스_조건별로 분류하여 주문상태 출력하기 풀이 -- MYSQL SELECT ORDER_ID , PRODUCT_ID , DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS OUT_DATE , CASE WHEN OUT_DATE IS NULL THEN "출고미정" WHEN DATE_FORMAT(OUT_DATE,'%Y%m%d') > "20220501" THEN "출고대기" ELSE "출고완료" END AS '출고여부' FROM FOOD_ORDER ORDER BY ORDER_ID ASC; -- ORACLE SELECT ORDER_ID , PRODUCT_ID , TO_CHAR(OUT_DATE, 'YYYY-MM-DD') AS OUT_DATE , CASE WHEN OUT_DATE IS NULL THEN '출고미정' WHEN OUT_DATE > DATE '2022-05-01' THEN '출고대기' ELSE '출고완료' END AS 출고여부 FROM FOOD_ORDER O
SQL_프로그래머스_카테고리 별 도서 판매량 집계하기

SQL_프로그래머스_카테고리 별 도서 판매량 집계하기

SQL_프로그래머스_카테고리 별 도서 판매량 집계하기 풀이 -- MYSQL SELECT B.CATEGORY , SUM(BS.SALES) AS TOTAL_SALES FROM BOOK B JOIN BOOK_SALES BS ON B.BOOK_ID = BS.BOOK_ID WHERE DATE_FORMAT(BS.SALES_DATE, '%Y%m') = '202201' GROUP BY B.CATEGORY ORDER BY CATEGORY; -- ORACLE SELECT B.CATEGORY , SUM(BS.SALES) AS TOTAL_SALES FROM BOOK B JOIN BOOK_SALES BS ON B.BOOK_ID = BS.BOOK_ID WHERE TO_CHAR(BS.SALES_DATE, 'YYYYMM') = '202201' GROUP BY B.CATEGORY ORDER BY CATEGORY; CATEGORY별 총 판매량을 체크하는데.. CATEGORY는 BOOK 테이블, 판매량은 BOOK_S
SQL_프로그래머스_성분으로 구분한 아이스크림 총 주문량

SQL_프로그래머스_성분으로 구분한 아이스크림 총 주문량

SQL_프로그래머스_성분으로 구분한 아이스크림 총 주문량 풀이 -- MYSQL, ORACLE SELECT INGREDIENT_TYPE , SUM(TOTAL_ORDER) AS TOTAL_ORDER FROM FIRST_HALF F JOIN ICECREAM_INFO I ON F.FLAVOR = I.FLAVOR GROUP BY INGREDIENT_TYPE ORDER BY TOTAL_ORDER ASC; 두 테이블의 키인 FLAVOR를 매칭, 이후 INGREDIENT_TYPE으로 그룹화하여 총주문량을 더한다. * 출처 https://school.programmers.co.kr/learn/courses/30/lessons/133026
SQL_프로그래머스_조건에 맞는 도서와 저자 리스트 출력하기

SQL_프로그래머스_조건에 맞는 도서와 저자 리스트 출력하기

SQL_프로그래머스_조건에 맞는 도서와 저자 리스트 출력하기 풀이 -- MYSQL SELECT B.BOOK_ID , A.AUTHOR_NAME , DATE_FORMAT(B.PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE FROM BOOK B JOIN AUTHOR A ON B.AUTHOR_ID = A.AUTHOR_ID WHERE B.CATEGORY = '경제' ORDER BY B.PUBLISHED_DATE ASC; -- ORACLE SELECT B.BOOK_ID , A.AUTHOR_NAME , TO_CHAR(B.PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE FROM BOOK B JOIN AUTHOR A ON B.AUTHOR_ID = A.AUTHOR_ID WHERE B.CATEGORY = '경제' ORDER BY B.PUBLISHED_DATE ASC; BOOK 테이블의 CATEGORY컬럼값이 경제인 데이터를 매칭해서
SQL_프로그래머스_자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

SQL_프로그래머스_자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

SQL_프로그래머스_자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 풀이 -- MYSQL, ORACLE SELECT CAR_TYPE , COUNT(CAR_ID) AS CARS FROM CAR_RENTAL_COMPANY_CAR WHERE OPTIONS LIKE '%통풍시트%' OR OPTIONS LIKE '%열선시트%' OR OPTIONS LIKE '%가죽시트%' GROUP BY CAR_TYPE ORDER BY CAR_TYPE ASC; 옵션중 통풍시트, 열선시트, 가죽시트가 하나 이상 포함된경우를 찾아 CAR종류와 그에 따른 개수를 출력하는 문제 문자열 포함 대상이 3단어라서 데이터가 적기에, CPU 사용을 낮추고자 정규표현식이 아닌 LIKE문을 사용 * 출처 https://school.programmers.co.kr/learn/courses/30/lessons/151137
SQL_프로그래머스_진료과별 총 예약 횟수 출력하기

SQL_프로그래머스_진료과별 총 예약 횟수 출력하기

SQL_프로그래머스_진료과별 총 예약 횟수 출력하기 풀이 -- MYSQL SELECT MCDP_CD AS "진료과 코드" , COUNT(APNT_YMD) AS "5월예약건수" FROM APPOINTMENT WHERE DATE_FORMAT(APNT_YMD, "%Y%m") = "202205" GROUP BY MCDP_CD ORDER BY COUNT(APNT_YMD) ASC, MCDP_CD ASC; -- ORACLE SELECT MCDP_CD AS "진료과 코드" , COUNT(APNT_YMD) AS "5월예약건수" FROM APPOINTMENT WHERE TO_CHAR(APNT_YMD, 'YYYYMM') = '202205' GROUP BY MCDP_CD ORDER BY COUNT(APNT_YMD) ASC, MCDP_CD ASC; 예약날짜가 2022년 5월 기준, 진료과 코드별 예약건수를 조회하여 예약건수 오름차순, 진료과 코드 오름차순으로 정렬한다. * 출처 https://school.
SQL_프로그래머스_가장 비싼 상품 구하기

SQL_프로그래머스_가장 비싼 상품 구하기

SQL_프로그래머스_가장 비싼 상품 구하기 풀이 -- MYSQL, ORACLE SELECT MAX(PRICE) AS MAX_PRICE FROM PRODUCT; PRICE중 가장 큰 값을 구하기 위해 MAX 함수 사용 * 출처 https://school.programmers.co.kr/learn/courses/30/lessons/131697
SQL_프로그래머스_12세 이하인 여자 환자 목록 출력하기

SQL_프로그래머스_12세 이하인 여자 환자 목록 출력하기

SQL_프로그래머스_12세 이하인 여자 환자 목록 출력하기 풀이 -- MYSQL SELECT PT_NAME , PT_NO , GEND_CD , AGE , IFNULL(TLNO, 'NONE') AS TLNO FROM PATIENT WHERE AGE <= 12 AND GEND_CD = 'W' ORDER BY AGE DESC, PT_NAME ASC; -- ORACLE SELECT PT_NAME , PT_NO , GEND_CD , AGE , NVL(TLNO, 'NONE') AS TLNO FROM PATIENT WHERE AGE <= 12 AND GEND_CD = 'W' ORDER BY AGE DESC, PT_NAME ASC; 나이가 12세 이하, 성별은 여성인경우 나이 내림차순, 이름 오름차순으로 조회 * 출처 https://school.programmers.co.kr/learn/courses/30/lessons/132201
SQL_프로그래머스_인기있는 아이스크림

SQL_프로그래머스_인기있는 아이스크림

SQL_프로그래머스_인기있는 아이스크림 풀이 -- MYSQL, ORACLE SELECT FLAVOR FROM FIRST_HALF ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID ASC; 정렬 하는 방법을 묻는 문제 * 출처 https://school.programmers.co.kr/learn/courses/30/lessons/133024
SQL_프로그래머스_흉부외과 또는 일반외과 의사 목록 출력하기

SQL_프로그래머스_흉부외과 또는 일반외과 의사 목록 출력하기

SQL_프로그래머스_흉부외과 또는 일반외과 의사 목록 출력하기 풀이 -- MYSQL SELECT DR_NAME , DR_ID , MCDP_CD , DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD FROM DOCTOR WHERE MCDP_CD IN ('CS', 'GS') ORDER BY HIRE_YMD DESC, DR_NAME ASC; -- ORACLE SELECT DR_NAME , DR_ID , MCDP_CD , TO_CHAR(HIRE_YMD, 'YYYY-MM-DD') AS HIRE_YMD FROM DOCTOR WHERE MCDP_CD IN ('CS', 'GS') ORDER BY HIRE_YMD DESC, DR_NAME ASC; IN 연산자와 ORDER BY의 작성법을 테스트하는 문제 * 출처 https://school.programmers.co.kr/learn/courses/30/lessons/132203
SQL_프로그래머스_조건에 맞는 회원수 구하기

SQL_프로그래머스_조건에 맞는 회원수 구하기

SQL_프로그래머스_조건에 맞는 회원수 구하기 풀이 -- ORACLE SELECT COUNT(*) AS USERS FROM USER_INFO WHERE AGE BETWEEN 20 AND 29 AND JOINED >= TO_DATE('2021-01-01', 'YYYY-MM-DD') AND JOINED < TO_DATE('2022-01-01', 'YYYY-MM-DD'); -- MYSQL SELECT COUNT(*) AS USERS FROM USER_INFO WHERE AGE BETWEEN 20 AND 29 AND DATE_FORMAT(JOINED, '%Y') = '2021'; AGE에서 NULL을 제외한 20세 이상 29세 이하 회원을 구하기 위해 BETWEEN 적용 년도 확인하기 위해 TO_DATE, DATE_FORMAT 함수로 문자열을 날짜형식으로 변환하여 비교 * 출처 https://school.programmers.co.kr/learn/courses/30/lessons/13153
SQL_프로그래머스_카테고리 별 상품 개수 구하기

SQL_프로그래머스_카테고리 별 상품 개수 구하기

SQL_프로그래머스_카테고리 별 상품 개수 구하기 풀이 -- MYSQL SELECT LEFT(PRODUCT_CODE, 2) AS CATEGORY , COUNT(*) AS PRODUCTS FROM PRODUCT GROUP BY LEFT(PRODUCT_CODE, 2) ORDER BY PRODUCT_CODE; -- ORACLE SELECT SUBSTR(PRODUCT_CODE, 1, 2) AS CATEGORY , COUNT(*) AS PRODUCTS FROM PRODUCT GROUP BY SUBSTR(PRODUCT_CODE, 1, 2) ORDER BY CATEGORY; 단일 패스 스캔, 직접 그룹화를 하여 성능 최적화 적용 정렬 시 컬럼명이 다른 이유 : MYSQL과 ORACLE의 SQL 표준 준수 차이 * 출처 https://school.programmers.co.kr/learn/courses/30/lessons/131529
ⓒ 2022 [개인공부] All rights reserved.
Supported by Keyzard