* 붙여넣는 과정에서 일부 정렬이 흐트러져있을 수 있습니다
* 풀이 중에 헷갈렸거나 어려웠던 부분, 나중에 알게된 부분 등을 간단하게 적어두었습니다
- 평균 일일 데이터 구하기
- AVG() 함수 생각을 못해서 코드가 길어졌다
| SELECT |
| ROUND((SUM(DAILY_FEE)/COUNT(*))) AS AVERAGE_FEE |
| FROM CAR_RENTAL_COMPANY_CAR |
| WHERE CAR_TYPE = 'SUV' |
| |
- 3월에 태어난 여성 회원 목록 출력하기
- 조건 중에 '여성' 회원이라는 점과 날짜 포맷을 맞춰야한다는 것을 놓쳐서 헤맸다. -> 코테에서는 조건을 주의깊게 볼 필요가 있겠다
| SELECT |
| MEMBER_ID |
| ,MEMBER_NAME |
| ,GENDER |
| ,DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d') AS DATE_OF_BIRTH |
| FROM MEMBER_PROFILE |
| WHERE MONTH(DATE_OF_BIRTH) = '3' |
| AND GENDER = 'W' |
| AND TLNO IS NOT NULL |
| ORDER BY MEMBER_ID ASC |
- 서울에 위치한 식당 목록 출력하기
- LEFT JOIN을 사용했는데 INNER JOIN으로 사용했어야 했다
| SELECT |
| RI.REST_ID |
| ,RI.REST_NAME |
| ,RI.FOOD_TYPE |
| ,RI.FAVORITES |
| ,RI.ADDRESS |
| ,ROUND(AVG(RR.REVIEW_SCORE),2) AS SCORE |
| FROM REST_INFO RI |
| INNER JOIN REST_REVIEW RR ON RI.REST_ID = RR.REST_ID |
| WHERE SUBSTRING(RI.ADDRESS,1,2) = '서울' |
| GROUP BY RI.REST_ID |
| ORDER BY SCORE DESC, RI.FAVORITES DESC |
| |
- 강원도에 위치한 생산공장 목록 출력하기
| SELECT |
| FACTORY_ID |
| ,FACTORY_NAME |
| ,ADDRESS |
| FROM FOOD_FACTORY |
| WHERE SUBSTRING(ADDRESS,1,3) = '강원도' |
| ORDER BY FACTORY_ID ASC |
| |
- 12세 이하인 여자 환자 목록 출력하기
| SELECT |
| PT_NAME |
| ,PT_NO |
| ,GEND_CD |
| ,AGE |
| ,IFNULL(TLNO,'NONE') |
| FROM PATIENT |
| WHERE AGE <= 12 |
| AND GEND_CD = 'W' |
| ORDER BY AGE DESC, PT_NAME ASC |
| |
- 흉부외과 또는 일반외과 의사 목록 출력하기
| 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 |
| |
- 과일로 만든 아이스크림 고르기
| SELECT |
| FH.FLAVOR |
| FROM FIRST_HALF FH |
| INNER JOIN ICECREAM_INFO II |
| ON FH.FLAVOR = II.FLAVOR |
| WHERE FH.TOTAL_ORDER > 3000 |
| AND II.INGREDIENT_TYPE = 'fruit_based' |
| ORDER BY FH.TOTAL_ORDER DESC |
1. 조건에 맞는 도서 리스트 출력하기
| SELECT |
| BOOK_ID |
| , DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE |
| FROM BOOK |
| WHERE PUBLISHED_DATE LIKE '2021%' |
| AND CATEGORY = '인문' |
| ORDER BY PUBLISHED_DATE ASC |
1. 모든 레코드 조회하기
| SELECT |
| * |
| FROM ANIMAL_INS |
| ORDER BY ANIMAL_ID ASC |
1. 오프라인/온라인 판매 데이터 통합하기
| WITH T_ON AS ( |
| SELECT |
| DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE |
| , PRODUCT_ID |
| , USER_ID |
| , SALES_AMOUNT |
| FROM ONLINE_SALE |
| ), T_OFF AS ( |
| SELECT |
| DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE |
| , PRODUCT_ID |
| , NULL AS USER_ID |
| , SALES_AMOUNT |
| FROM OFFLINE_SALE |
| ) |
| SELECT |
| TMP.SALES_DATE |
| , TMP.PRODUCT_ID |
| , TMP.USER_ID |
| , TMP.SALES_AMOUNT |
| FROM ( |
| SELECT * FROM T_ON |
| UNION ALL |
| SELECT * FROM T_OFF |
| ) TMP |
| WHERE TMP.SALES_DATE LIKE '2022-03%' |
| ORDER BY TMP.SALES_DATE ASC, TMP.PRODUCT_ID ASC, TMP.USER_ID ASC |
1. 아픈 동물 찾기
- 테이블의 정보를 잘못봐서 ‘아픈’ 동물인 조건이 제외되었었다
| SELECT |
| ANIMAL_ID |
| , NAME |
| FROM ANIMAL_INS |
| WHERE INTAKE_CONDITION = |
| ORDER BY ANIMAL_ID |
1. 어린 동물 찾기
| SELECT |
| ANIMAL_ID, |
| NAME |
| FROM ANIMAL_INS |
| WHERE INTAKE_CONDITION NOT IN ( |
| ORDER BY ANIMAL_ID |
1. 동물의 아이디와 이름
| SELECT |
| ANIMAL_ID |
| , NAME |
| FROM ANIMAL_INS |
| ORDER BY ANIMAL_ID |
1. 여러기준으로 정렬하기
| SELECT |
| ANIMAL_ID |
| , NAME |
| , DATETIME |
| FROM ANIMAL_INS |
| ORDER BY NAME, DATETIME DESC |
1. 상위 n개 레코드
| SELECT |
| NAME |
| FROM ANIMAL_INS |
| ORDER BY DATETIME ASC |
| LIMIT 1 |
1. 조건에 맞는 회원수 구하기
| SELECT |
| COUNT(*) |
| FROM USER_INFO |
| WHERE JOINED LIKE '2021%' |
| AND AGE BETWEEN 20 AND 29 |
1. 인기있는 아이스크림
| SELECT |
| FLAVOR |
| FROM FIRST_HALF |
| ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID |
1. 재구매가 일어난 상품과 회원 리스트 구하기
- 2시간 헤매고 결국 답변봄
- GROUP BY에 다중 값을 줄 수 있다는 사실을 몰라서 1차 헤맸고, 조건에 맞는 코드를 제대로 생각해내지 못했다
| SELECT |
| USER_ID, PRODUCT_ID |
| FROM |
| ONLINE_SALE |
| GROUP BY USER_ID, PRODUCT_ID |
| HAVING COUNT(PRODUCT_ID) > 1 |
| ORDER BY USER_ID, PRODUCT_ID DESC |
1. 역순 정렬하기
| SELECT |
| NAME |
| , DATETIME |
| FROM ANIMAL_INS |
| ORDER BY ANIMAL_ID DESC |