TIL 19일차 : 팀장, DATE_FORMAT, HOUR, HAVING, COALESCE, OR
도전한 점
- 새로운 팀 : SQRD 강의는 기존에 줬던 건데 이게 기초라고 심화라고 뭐지
- SQL 코드카타 5문제 풀이 : DATE_FORMAT 완전정복, HOUR 배움
- 팀별 회의 : 팀장됨 이쯤되면 운명인가
- 실습 1, 2 서브쿼리 사용에 대한 고뇌 : 없이도 만들어 보기 -> 해답은 DATE_FORMAT
- 데이터분석 강의 3주차 복습 내용은 여기에 : https://specialda.tistory.com/29
- 실습 26. (조건 붙은) 입양 시각 구하기 : SUBSTR, 서브쿼리, COUNT
# 1차 작성코드, 7시와 8시는 제거해야 하는데 어떻게 하더라? 자꾸 IF먼저 생각하지마
SELECT HOUR,
COUNT(HOUR) COUNT
FROM
(SELECT SUBSTR(DATETIME, 12, 2) HOUR
FROM ANIMAL_OUTS
) A
GROUP BY 1
ORDER BY 1
# 2차 작성코드, 조건 하나만 줄 때는 WHERE절 사용한다. 근데 자꾸 틀렸대
SELECT HOUR,
COUNT(HOUR) COUNT
FROM
(SELECT SUBSTR(DATETIME, 12, 2) HOUR
FROM ANIMAL_OUTS
) A
WHERE HOUR >= 9
GROUP BY HOUR
ORDER BY HOUR
# 범위를 BETWEEN으로 주니까 정답이다.
SELECT HOUR,
COUNT(HOUR) COUNT
FROM
(SELECT SUBSTR(DATETIME, 12, 2) HOUR
FROM ANIMAL_OUTS
) A
WHERE HOUR BETWEEN 9 AND 19
GROUP BY HOUR
ORDER BY HOUR
# 데이트 포맷을 이해한 나(서브쿼리 없는 정답 코드)
SELECT DATE_FORMAT(DATETIME, '%H') HOUR,
COUNT(1) COUNT
FROM ANIMAL_OUTS
WHERE DATE_FORMAT(DATETIME, '%H') BETWEEN 9 AND 19
GROUP BY 1
ORDER BY 1
# HOUR, HAVING을 사용할 수 있다. HOUR은 함수가 아님을 나타내기 위해 HUR로 변경함.
SELECT HOUR(DATETIME) AS HUR,
COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HUR
HAVING HUR BETWEEN 9 AND 19
ORDER BY HUR
*DATE_FORMAT 실제 사용 결과 모음 (년/월/일/시/분/초/요일/시간)
- 실습 27. 진료과별 총 예약 횟수 출력하기 : 조건 하나만 딱! 주고 싶을 때는 WHERE, 서브쿼리 A+B(너무 길어) -> WHERE LIKE 또는 DATE_FORMAT 사용하기
# 2022년도라는 조건을 빼먹었는데 정답이라고 나오는데 정확한 건 아니다.
SELECT MCDP_CD "진료과 코드",
COUNT(MCDP_CD) "5월예약건수"
FROM
# '05'월만 선택 출력하다.
(
SELECT MCDP_CD,
APNT_M
FROM
# '월'까지만 선택 출력하다.
(
SELECT SUBSTR(APNT_YMD, 6, 2) APNT_M,
MCDP_CD
FROM APPOINTMENT
) A
WHERE APNT_M = 05
) B
GROUP BY 1
ORDER BY 2, 1
# 간단하게 LIKE절을 이용한 구문
SELECT MCDP_CD "진료과코드",
COUNT(1) "5월예약건수"
FROM APPOINTMENT
WHERE APNT_YMD LIKE '%2022-05%'
GROUP BY 1
ORDER BY 2, 1
# DATE_FORMAT에 등호(=) 조건 주기
SELECT MCDP_CD "진료과코드",
COUNT(1) "5월예약건수"
FROM APPOINTMENT
WHERE DATE_FORMAT(APNT_YMD, '%Y-%m') = '2022-05'
GROUP BY 1
ORDER BY 2, 1
*DATE_FARMAT을 SELECT에도 쓰고 WHERE에도 쓴 실습 3-2 : https://specialda.tistory.com/25
- 실습 28. 12세 이하 여자 환자 목록 출력하기 : 이번 문제는 IF절을 SELECT에 써야한다. WHERE절은 조건을 한정시키는 것이지 컬럼내용을 변경시키려면 오류 뜬다. (자세한 건 코딩테스트 캡쳐로 확인하기)
# 위(IF), 아래(COALESCE) 모두 정답이다.
SELECT PT_NAME, PT_NO, GEND_CD, AGE,
IF(TLNO IS NULL, 'NONE', TLNO) TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME ASC
# NULL값에는 COALESCE 사용을 익히도록 한다.
SELECT PT_NAME, PT_NO, GEND_CD, AGE,
COALESCE(TLNO, 'NONE') TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME ASC
*COALESCE 개념 설명 및 예시 참고 : https://specialda.tistory.com/25
- 실습 29. 인기있는 아이스크림 : GROUP BY, ORDER BY, DESC, ASC
SELECT FLAVOR
FROM FIRST_HALF
GROUP BY 1 -> 생략가능
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID ASC
- 실습 30. 특정 옵션이 1개 이상 추가된 자동차 수 구하기 : LIKE, OR 반복구문
*조건을 지정하는 방법 종류 참고 : https://specialda.tistory.com/23
# 트럭도 들어가고 맞는데 왜 틀렸다고 합니까?
SELECT car_type CAR_TYPE,
COUNT(car_id) CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE options LIKE '%통풍시트%' OR '%열선시트%' OR '%가죽시트%'
GROUP BY 1
ORDER BY 1
* 최근에 같은 실수 한 부분 참고 : https://specialda.tistory.com/35
# OR절 사이에는 독자적인 구문이 들어감을 기억하자.
SELECT car_type CAR_TYPE,
COUNT(car_id) CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE options LIKE '%통풍시트%' OR
options LIKE '%열선시트%' OR
options LIKE '%가죽시트%'
GROUP BY 1
ORDER BY 1
좋았던 점
- 파이썬을 기초부터 배우니 아주 신난다.
아쉬운 점
- 실무에 배운 게 어떻게 쓰이는지 알고 싶다.
잊지말 점
- DATE_FORMAT 사용법을 완벽 정리하고 배웠으니 잊지 말기
시도할 점
- 데분복습, 파이썬 2장 완강하기