본문 바로가기
데이터베이스/MySQL

[MySQL] 프로그래머스스쿨 연습문제 Lv.2 모음2

by 상똥 2023. 4. 27.

1. 진료과별 총 예약 횟수 출력하기

코딩테스트 연습 - 진료과별 총 예약 횟수 출력하기 | 프로그래머스 스쿨 (programmers.co.kr)
풀이
 
회고
- 놀라운 사실,,, SELECT문에서 AS 생략 가능이엇음 ㄷ ㄷ
- ORDER BY 쓸 때 그냥 열 순서로 대체해도 됨 (=ORDER BY 2, 1)
- TIMESTAMP여도 DATE_FORMAT사용하면 됨
- 날짜든 시간이든 수치든 BETWEEN-AND로 범위 설정 가능
코드 (접은 글)
더보기
SELECT MCDP_CD AS '진료과 코드', COUNT(MCDP_CD) '5월예약건수'
FROM APPOINTMENT
WHERE DATE_FORMAT(APNT_YMD, '%Y-%m-%d') BETWEEN '2022-05-01' AND '2022-05-31'
GROUP BY MCDP_CD
ORDER BY COUNT(MCDP_CD), MCDP_CD

 

2. 재구매가 일어난 상품과 회원 리스트 구하기

코딩테스트 연습 - 재구매가 일어난 상품과 회원 리스트 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
풀이
1. 셀프 조인을 위해 테이블을 A와 B라는 이름으로 새로 만들어 준다
2. 두 테이블의 USER_ID와 PRODUCT_ID가 각각 같은 것을 기준으로 조인해준다.
3. SELECT문에서 DISTINCT를 사용해 하나씩만 나오도록 설정한다.
4. SELECT문에서 어느 테이블의 컬럼을 출력할지 설정한다.
5. WHERE문에서 SALES_DATE가 다른 경우에만 출력하도록 설정
회고
- 조인하면 SELECT문에서 꼭 어느 컬럼의 열을 출력할지 기재해줘야됨 잊지마!!!!!!!!!!!!!!!!!!!!
코드 (접은 글)
더보기
SELECT DISTINCT A.USER_ID, A.PRODUCT_ID
FROM ONLINE_SALE AS A JOIN ONLINE_SALE AS B 
     ON A.USER_ID = B.USER_ID AND A.PRODUCT_ID = B.PRODUCT_ID
WHERE A.SALES_DATE != B.SALES_DATE
ORDER BY USER_ID, PRODUCT_ID DESC

 

3. 상품 별 오프라인 매출 구하기

코딩테스트 연습 - 상품 별 오프라인 매출 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
풀이
1. SUM(PRODUCT.PRICE*OFFLINE_SALE.SALES_AMOUNT) 해야 답 나옴
2. 상품 코드를 기준으로 계산
3. OFFLINE_SALE의 상품 코드를 기준으로 묶는다
회고
- 난 정말 알리아스도 싫어하고 조인도 싫어하나보다,,,
코드 (접은 글)
더보기
SELECT PRODUCT.PRODUCT_CODE, SUM(PRODUCT.PRICE*OFFLINE_SALE.SALES_AMOUNT) SALES
FROM PRODUCT, OFFLINE_SALE
WHERE PRODUCT.PRODUCT_ID = OFFLINE_SALE.PRODUCT_ID
GROUP BY OFFLINE_SALE.PRODUCT_ID
ORDER BY SALES DESC, PRODUCT_CODE

//INNER JOIN 사용한 코드
SELECT PRODUCT.PRODUCT_CODE, SUM(PRODUCT.PRICE*OFFLINE_SALE.SALES_AMOUNT) SALES
FROM PRODUCT INNER JOIN OFFLINE_SALE
     ON PRODUCT.PRODUCT_ID = OFFLINE_SALE.PRODUCT_ID
GROUP BY OFFLINE_SALE.PRODUCT_ID
ORDER BY SALES DESC, PRODUCT_CODE

 

4. 가격대 별 상품 개수 구하기

코딩테스트 연습 - 가격대 별 상품 개수 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
풀이
1. TRUNCATE를 사용해서 범위를 나눠준다.
2. 위에서 나눈 범위를 내림차순 정렬해준다.
3. PRODUCT_ID를 PRICE_GROUP별로 COUNT
회고
- TRUNCATE가 테이블 데이터 삭제하는걸로만 알고 있었는데 이런식으로도 변형이 가능하군요,,
코드 (접은 글)
더보기
SELECT TRUNCATE(PRICE, -4) PRICE_GROUP, COUNT(PRODUCT_ID) PRODUCT
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP

 

5. 카테고리별 상품 개수 구하기

코딩테스트 연습 - 카테고리 별 상품 개수 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
풀이
 
회고
- 문자 자를때는 LEFT(컬럼, 개수) or RIGTH(컬럼, 개수) or SUBSTR(컬럼, 시작 인덱스, 개수)
코드 (접은 글)
더보기
SELECT LEFT(PRODUCT_CODE, 2) CATEGORY, COUNT(PRODUCT_ID) PRODUCTS
FROM PRODUCT
GROUP BY CATEGORY
ORDER BY CATEGORY