SQL 문제 65

문제 39. 성분으로 구분한 아이스크림(난이도 2)

문제만 길지 사실 배운 내용을 바탕으로 잘 조합하면 쉬운 문제이다.먼저 JOIN ON으로 두 테이블을 Join 시켜주고,GROUP BY문으로 그룹을 만든 후,그 룹의 TOTAL_ORDER를 SUM으로 더하고 이름을 변경해주면 된다. 제출한 코드 :  SELECT B.INGREDIENT_TYPE, SUM(A.TOTAL_ORDER) AS TOTAL_ORDER FROM FIRST_HALF AS A INNER JOIN ICECREAM_INFO AS B ON A.FLAVOR = B.FLAVOR GROUP BY B.INGREDIENT_TYPE ORDER BY TOTAL_ORDER ASC

SQL 문제 2024.07.22

문제 38. 조건별로 분류하여 주문상태 출력하기(난이도 5)(CASE 복습)

출고완료, 출고대기, 출고미정 3가지 경우가 존재하기 때문에 CASE 문을 사용해야한다. CASE 문 사용 방법은 CASEWHEN 컬럼명 + 조건 THEN 결과값WHEN 컬럼명 + 조건 THEN 결과값ELSE 결과값END AS "표기 이름" 으로 사용한다. 제출한 코드 :  SELECT ORDER_ID, PRODUCT_ID, SUBSTRING(OUT_DATE, 1, 10) AS OUT_DATE, CASE WHEN OUT_DATE IS NULL THEN '출고미정' WHEN OUT_DATE > '2022-05-01' THEN '출고대기' ELSE '출고완료' END AS 출고여부 FROM FOOD_ORDER ORDER BY ORDER_ID ASC

SQL 문제 2024.07.22

문제 37. 조건에 맞는 도서와 저자 리스트 출력하기(난이도 2)

BOOK 테이블에는 저자명이 없고, AUTHOR 테이블에는 책의 카테고리가 없는 상태이다.위의 두 테이블을 이용해 원하는 결과를 얻기 위해서는 JOIN을 사용해야 한다. 그 사실을 발견하면 비교적 쉽게 문제를 해결할 수 있다. 그런데, PUBLISHED_DATE 변수의 타입이 DATE라 시, 분, 초가 연도, 월, 일과 같이 출력된다.이때는 SUBSTRING(PUBLISHED_DATE, 시작위치, 길이)를 사용하면 된다. 제출한 코드 :  SELECT A.BOOK_ID, B.AUTHOR_NAME, SUBSTRING(A.PUBLISHED_DATE,1,10) AS PUBLISHED_DATE FROM BOOK AS A JOIN AUTHOR AS B ON A.AUTHOR_ID = B.AUTHOR_ID WHERE..

SQL 문제 2024.07.22

문제 35. 오랜 기간 보호한 동물(2)(난이도 5)

이번 문제도 문제는 간단하지만, ORDER BY에서 두 테이블의 DATETIME을 사칙연사자로 계산 후 정렬할 수 있나?라는 의문이 있었다. 결과는, DATETIME끼리 사칙연산 이후 정렬이 가능했다!!. 제출한 코드 :  SELECT B.ANIMAL_ID, B.NAME FROM ANIMAL_INS AS A INNER JOIN ANIMAL_OUTS AS B ON A.ANIMAL_ID = B.ANIMAL_ID ORDER BY (B.DATETIME - A.DATETIME) DESC LIMIT 0, 2

SQL 문제 2024.07.22

문제 33. 상품 별 오프라인 매출 구하기(난이도 7)

기존에 배운 INNER JOIN을 사용해야한다.따라서, FROM PRODUCT AS A INNER JOIN OFFLINE_SALE AS BON A.PRODUCT_ID = B.PRODUCT_ID 로 해주었고,  GROUP BY A.PRODUCT_CODE로 그룹으로 묶어준 후 ORDER BY SALES DESC, A.PRODUCT_CODE ASC 로 정렬해줬다. 그런데 문제에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하세요.가 문제에서 구하고자하는 값인데, SELECT A.PRODUCT_CODE, A.PRICE * B.SALES_AMOUNT as SALES 로 상품코드 별 매출액만 구하고 더하지를 않아 원하는 결과가 출력되지 않았다. 위의 사실을 모른체 JOIN ON과 GROUP BY에 문제가 있..

SQL 문제 2024.07.22

문제 32. 카테고리 별 도서 판매량 집계하기(난이도 7)(INNER JOIN)

아직 문제를 보고 CROSS 조인(아직 사용해 및 학습 경험 없음)을 사용해야 하는지,INNER 조인을 사용해야 하는지 긴가민가 하다.본 문제는 INNER 조인으로 교집합 부분을 사용한 문제였다. 으로 사용되고, SQL에서 JOIN만 적을 경우 INNER JOIN이 되지만, 다른 사람이 보았을 때 쉽게 이해하기 위해INNER JOIN이라 사용할 것 같다. 아직 GROUP BY에 사용될 컬럼명을 결정하는게 미숙한 것 같다... 이유로는  GROUP BY A.BOOK_ID을 사용해  원하는 결과가 나오지 않았기 때문이다. 정답인 GROUP BY "컬럼명"은 GROUP BY A.BOOK_ID 이었다. 제출한 코드 :  SELECT A.CATEGORY AS CATEGORY, SUM(B.SALES) AS TOTA..

SQL 문제 2024.07.17

문제 31. 오랜 기간 보호한 동물(난이도 10)(OUTER JOIN, LIMIT)

상당히 유익하고 재미있는 문제였다.  2개의 테이블이 존재하는 것을 보고 '아! 이건 JOIN을 사용해야 하는 문제다' 라는걸 바로 알아차렸다. 하지만, 한 번도 JOIN을 사용해 본 적이 없어서 찾아본 결과 JOIN에는 OUTER, INNER, CROSS, SELF가 있었다. OUTER JOIN에는 로 LEFT, FLL, RIGHT가 존재했고 OUTER JOIN에서 OUTER를 생략한 LEFT JOIN, FULL JOIN, RIGHT JOIN으로 사용 가능했다. LEFT JOIN : FROM 절에서 왼쪽에 적은 테이블을 기준으로 출력RIGHT JOIN : FROM 절에서 오른쪽에 적은 테이블을 기준으로 출력FULL JOIN : FROM절에 사용된 모든 테이블을 기준으로 출력 이다. 이때, WHERE을 ..

SQL 문제 2024.07.17

문제 27. 진료과별 총 예약 횟수 출력하기(난이도 7)

문제를 푸는데 오랜 시간이 걸렸다. 이유로는 TIMESTAMP 자료형에서 연도(YEAR), 월(MONTH)을 추출하는 함수를 찾는데 시간이 조금 걸렸고 정렬 부분에서 결과가 "진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬한다" (정답 : ORDER BY COUNT(MCDP_CD) ASC, 진료과코드 ASC) 인데,  ORDER BY "5월예약건수"(COUNT(*)) ASC, 진료과코드 ASC 로 개수를 먼저 정렬하고, 진료과코드로 정렬을 진행했기 때문이다. 마지막으로 시간이 가장 빼았긴 이유는 예약 취소 여부 때문이다.개인적인 생각으로는 APNT_CNCL_YN이 N과 NULL인 것만결과로 출력해야 한다고 생각했기 때문에 이 부분을 고..

SQL 문제 2024.07.17