DataBase/SQL Query Problem(101)
-
[프로그래머스] 조건에 맞는 사용자 정보 조회하기_Oracle
학교에서 데이터베이스 수업을 듣는데 Oracle로 진행한다고 해서 지금까지 MySQL로 풀었던 sql문제들을 Oracle로 다시 풀어보고 있다. 아직까지는 크게 다른 점은 없었고, CONCAT함수의 사용방법이 조금달랐다. MySQL의 경우 인자를 마구마구 써서 모든 인자를 합쳐줬는데 Oracle에서는 단 2개의 인자만 허용하기 때문에 여러 문자열을 합치기에는 불편하다. 그래서 '||' 연산자를 적극 활용하기를 추천한다. 정답 SELECT USER_ID, NICKNAME, CITY || ' ' || STREET_ADDRESS1 || ' ' || STREET_ADDRESS2, SUBSTR(TLNO, 1, 3) || '-' || SUBSTR(TLNO, 4, 4) || '-' || SUBSTR(TLNO, 8, ..
2023.04.04 -
[프로그래머스] 상품을 구매한 회원 비율 구하기_MySQL
프로그래머스에 있는 모든 sql 문제를 다 풀었다. 마지막 문제인 유일한 레벨 5 문제였다. 확실히 레벨 4에 비하면 한 번 더 꼬았다는 느낌이 들었다. 나는 우선 2021년에 가입한 회원을 구해서 DATA1 테이블을 만들었다. 그리고 DATA1 테이블과 ONLINE_SALE 테이블을 조인하고 년, 월, USER_ID로 그룹핑하여 년, 월 별로 상품을 구매한 회원들을 구할 수 있었다. 년, 월 뿐만 아니라 USER_ID로 그룹핑을 한 이유는 한 회원이 같은 년, 월에 2번 이상 구매했을 수도 있어서 중복을 처리해주어야 하기 때문이다. 이렇게 해서 DATA2 테이블을 만들었다. 이 DATA2 테이블을 한 번 더 년, 월에 대해 그룹핑하면 년, 월 별 구매한 회원 수를 구할 수 있다. 그리고 DATA1 테이..
2023.03.25 -
[프로그래머스] 식품분류별 가장 비싼 식품의 정보 조회하기_MySQL
카테고리 별로 가격의 최댓값을 구해 테이블을 만들면 해당 테이블과 FOOD_PRODUCT 테이블을 조인하여 카테고리 별로 최대 가격을 가진 상품을 알 수 있다. 정답 WITH DATA1 AS ( SELECT CATEGORY, MAX(PRICE) MAX_PRICE FROM FOOD_PRODUCT GROUP BY CATEGORY ) SELECT FR.CATEGORY, DATA1.MAX_PRICE, FR.PRODUCT_NAME FROM FOOD_PRODUCT FR INNER JOIN DATA1 ON FR.CATEGORY = DATA1.CATEGORY WHERE FR.PRICE = MAX_PRICE AND ( FR.CATEGORY LIKE '과자' OR FR.CATEGORY LIKE '국' OR FR.CATEG..
2023.03.24 -
[프로그래머스] 5월 식품들의 총매출 조회하기_MySQL
먼저 2022년 5월에 생산된 상품들의 id와 총 생산량을 구하면 된다. 그리고 위에서 구한 테이블과 FOOD_PRODUCT 테이블과 조인하여 해당하는 상품들의 정보를 보이면 된다. 정답 WITH DATA1 AS ( SELECT PRODUCT_ID, SUM(AMOUNT) TOTAL_AMOUNT FROM FOOD_ORDER WHERE PRODUCE_DATE LIKE '2022-05%' GROUP BY PRODUCT_ID ) SELECT FP.PRODUCT_ID, FP.PRODUCT_NAME, PRICE * TOTAL_AMOUNT TOTAL_SALES FROM FOOD_PRODUCT FP INNER JOIN DATA1 ON FP.PRODUCT_ID = DATA1.PRODUCT_ID ORDER BY TOTAL..
2023.03.23 -
[프로그래머스] 서울에 위치한 식당 목록 출력하기_MySQL
아니 분명 쉬워 보였고, 쉬운 문젠데 자꾸 틀렸다고 나와서 화날 뻔 했다. 서울에 위치한 식당이라길래 WHERE ADDRESS LIKE '서울특별시%' 위 처럼 where 절을 이용해 서울에 있는 식당들만 뽑았다. 나중에 보니까 주소가 '서울시' 로 시작하는 식당도 있더라...ㅋㅋ 또 리뷰가 없는 서울 식당은 어떻게 처리해야할지 명시가 되어 있지 않다. 처음엔 리뷰가 없는 서울 식당은 그냥 SCORE를 0.00 으로 했는데 리뷰가 없는 식당은 선택하지 않으면 된다. 뭐 이건 그냥 꼬투리가 잡고 싶었다. 정답 SELECT RI.REST_ID, RI.REST_NAME, RI.FOOD_TYPE, RI.FAVORITES, RI.ADDRESS, ROUND(AVG(RR.REVIEW_SCORE), 2) SCORE F..
2023.03.22 -
[프로그래머스] 그룹별 조건에 맞는 식당 목록 출력하기_MySQL
리뷰수가 가장 많은 회원을 찾기 위해서는 리뷰수의 최댓값을 알야야 한다. 이를 위해 MEMBER_ID로 그룹핑하여 COUNT하면 각 회원 별로 리뷰수가 나온다. 위에서 구한 각 회원 별 리뷰수를 가지고, 리뷰수의 최댓값과 그 최댓값을 가진 회원들을 구할 수 있다. 이제 끝났다. 최댓값을 가진 회원들의 리뷰 목록을 문제의 조건에 맞게 정렬하여 보이면 된다. 정답 WITH DATA1 AS ( SELECT *, COUNT(*) REVIEW_CNT FROM REST_REVIEW GROUP BY MEMBER_ID ), DATA2 AS ( SELECT MEMBER_ID FROM DATA1 WHERE REVIEW_CNT = ( SELECT MAX(REVIEW_CNT) FROM DATA1 ) ) SELECT MR.ME..
2023.03.21