1. [SQL] 문자열 길이 얻기
CHAR_LENGTH(string) 을 이용하면 영문, 한글, 공백을 1개씩 세준다.
LENGTH(string)을 사용해도 같은 결과를 얻을 수 있다. 하지만 CHAR_LENGTH와 달리 문자열의 바이트 길이를 센다. 따라서 유니코드가 있는 경우 주의하여 사용한다.
SELECT tweet_id
FROM tweets
WHERE CHAR_LENGTH(content) > 15
WHERE LENGTH(content) > 15
2. 특정기간 제외 JOIN
전체기간 중에서 11월달을 제외하려 할때, 제외할 데이터가 담긴 쿼리(table2)를 먼저 만들어 준다. 이후 두 테이블을 합지는데, table1 LEFT JOIN table2 on table1.col = table2.col을 사용하여 왼쪽테이블에 맞추어 제외할 데이터를 join시킨 다음 , WHERE 에 table2.col is null을 사용하여 두집합의 교집합을 삭제시킬수 있다.
-- 세단이랑 suv 추출
WITH type AS (SELECT car_id, car_type, daily_fee
FROM CAR_RENTAL_COMPANY_CAR
WHERE car_type IN ('세단','SUV'))
-- 11월에 약속있는 차들
, nvailable11 AS (SELECT car_id, start_date, end_date
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '2022-11' BETWEEN DATE_FORMAT(start_date,'%Y-%m') AND DATE_FORMAT(end_date,'%Y-%m'))
-- 30일간의 대여 금액할인율
, discount AS (select car_type, discount_rate
from CAR_RENTAL_COMPANY_DISCOUNT_PLAN
WHERE car_type IN ('세단','SUV')
AND duration_type = '30일 이상')
-- 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차
select ty.car_id
, ty.car_type
, round(ty.daily_fee*30 *(1-dc.discount_rate/100)) FEE
FROM type ty
left join discount dc
on ty.car_type = dc. car_type
left join nvailable11 nv
on ty.car_id = nv.car_id
WHERE nv.car_id is null
HAVING fee BETWEEN 500000 AND 2000000
ORDER BY fee DESC
,car_type
,car_id
[TIL] 과제) 데이터 환경의 기업 속 데이터 분석 직무 (0) | 2024.07.19 |
---|---|
[WIL] 3주차 (0) | 2024.07.12 |
[TIL] WEEK 3 THUR -DUAL, 사용자 변수, 시간대 별 통계량, RECURSIVE (0) | 2024.07.11 |
WEEK 3 WEN DATEDIFF(date1,date2), DATE_ADD/SUB (0) | 2024.07.10 |
WEEK 3 TUES (0) | 2024.07.09 |