내일배움캠프 5기 합류 전 기본적인 강의를 들어야 한다고 한다.
웹개발을 위한 기본적인 강의 (HTML, CSS, JavaScript)
진도
- 네가지 심플한 과제를 통해 숙달하고자 한다
- 화성에 땅 사기, 영화 평점
- 프로젝트 폴더를 만들어주고 백엔드를 담당할
app.py
와 프론트엔드를 담당할templates/index.html
파일 만들어준다- 명령어창에 python -m venv venv로 프로젝트 전용 가상환경을 만들어준다
- 필요한 모듈들을 이제 venv에 담아준다(pip install ~~~)
- Flask(웹 애플리케이션 개발 모듈), pymongo(MondoDB 라이브러리), dnspython(파이썬의 DNS관련 모듈)
감상
프론트엔드와 백엔드를 맛볼 수 있는 과제들이었다
코딩테스트 연습
개요: 자동차의 평균 대여 기간이 7일 이상인 자동차들의 평균 대여 기간을 구하는 문제
SELECT * FROM (SELECT CAR_ID, round(avg(DATEDIFF(end_date, start_date)) + 1,1) as AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID) as A
WHERE A.AVERAGE_DURATION >= 7
ORDER BY A.AVERAGE_DURATION DESC, A.CAR_ID DESC;
DATEDIFF(end_date, start_date) + 1
로 +1해주는 게 키 포인트였다.SELECT car_id, round(avg((DATEDIFF(END_DATE, START_DATE) + 1)),1) as AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY car_id
HAVING AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, car_id DESC;
SELECT절의 alias는 ORDER BY절에서만
사용 가능하다. 하지만 MySQL
은 HAVING절을 평가하기 전에 SELECT절을 일부 평가하므로 위 문제처럼 사용가능하다.개요: 문자열 중에 특정 단어가 포함되어 있으면 새로운 칼럼에 O, X 표시하기
SELECT ANIMAL_ID,
NAME,
IF(SEX_UPON_INTAKE LIKE '%Neutered%' or
SEX_UPON_INTAKE LIKE '%Spayed%', 'O', 'X') as '중성화'
FROM ANIMAL_INS;
LIKE
함수를 IF
함수 안에도 사용할 수 있다LOCATE('검색값', 문자열)
: 문자열 안에 검색값이 있으면 그 위치를 반환LOCATE()
함수를 이용해 위치가 1이상이라면 O, 아니면 X로 문제를 풀 수도 있다개요: 두 개의 테이블을 조인(JOIN)해서 특정 튜플을 찾는 문제
SELECT T.ANIMAL_ID, T.NAME FROM
(SELECT ins.ANIMAL_ID,
ins.NAME,
(DATEDIFF(outs.DATETIME, ins.DATETIME) + 1) as longtime
FROM ANIMAL_INS as ins
INNER JOIN ANIMAL_OUTS as outs
ON ins.ANIMAL_ID = outs.ANIMAL_ID
ORDER BY longtime DESC
LIMIT 2) as T;
SELECT O.ANIMAL_ID, O.NAME FROM ANIMAL_OUTS O
JOIN ANIMAL_INS I
ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY DATEDIFF(O.DATETIME, I.DATETIME) DESC
LIMIT 2
DATEDIFF(O.DATETIME, I.DATETIME)
로 순서를 구해주는 방법이다개요: 두 개의 테이블을 조인(JOIN)해서 특정 튜플을 찾는 문제
SELECT T.ANIMAL_ID, T.NAME FROM
(SELECT ins.ANIMAL_ID,
ins.NAME,
(DATEDIFF(outs.DATETIME, ins.DATETIME) + 1) as longtime
FROM ANIMAL_INS as ins
INNER JOIN ANIMAL_OUTS as outs
ON ins.ANIMAL_ID = outs.ANIMAL_ID
ORDER BY longtime DESC
LIMIT 2) as T;
SELECT O.ANIMAL_ID, O.NAME FROM ANIMAL_OUTS O
JOIN ANIMAL_INS I
ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY DATEDIFF(O.DATETIME, I.DATETIME) DESC
LIMIT 2
DATEDIFF(O.DATETIME, I.DATETIME)
로 순서를 구해주는 방법이다개요: 문자열 자르기
SELECT SUBSTRING(PRODUCT_CODE, 1, 2) as CATEGORY,
count(*) as PRODUCTS
FROM PRODUCT
GROUP BY CATEGORY
ORDER BY CATEGORY
SUBSTRING(COLUMN, 시작할 문자열 위치(1 시작), 끝낼 문자열 위치)
: 문자열을 일부만 추출개요: 칼럼이 다른 두 테이블을 UNION하고 특정 범위의 데이터를 추출하는 문제
SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d"), PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM
((SELECT SUBSTRING(SALES_DATE, 1, 10) as SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT FROM ONLINE_SALE)
UNION ALL
(SELECT SALES_DATE, PRODUCT_ID, NULL USER_ID, SALES_AMOUNT FROM OFFLINE_SALE)) as A
WHERE MONTH(SALES_DATE) = 3
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
DATE_FORMAT(column, '%Y-%m-%d')
: DATE 타입 변경NULL column명
하면 해당 columns을 NULL로 채우겠단 소리