* 붙여넣는 과정에서 일부 정렬이 흐트러져있을 수 있습니다
* 풀이 중에 헷갈렸거나 어려웠던 부분, 나중에 알게된 부분 등을 간단하게 적어두었습니다
- 평균 일일 데이터 구하기
- 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 = 'sick'
ORDER BY ANIMAL_ID
1. 어린 동물 찾기
SELECT
ANIMAL_ID,
NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION NOT IN ('Aged')
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