알고리즘/My SQL
[My SQL] 숫자 연산자 , 문자 연산자
Judith Hopps
2023. 2. 10. 15:09
숫자 연산자
BETWEEN
NOT BETWEEN {MIN} AND {MAX} |
두 값 사이가 아닌 곳에 있음 |
BETWEEN {MIN} AND {MAX} |
두 값 사이에 있음 |
-- 코드를 입력하세요
SELECT MONTH(START_DATE) AS MONTH, CAR_ID,
COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY H
WHERE YEAR(START_DATE)=2022 AND MONTH(START_DATE) BETWEEN 8 AND 10
AND CAR_ID IN (SELECT HH.CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY HH
WHERE YEAR(HH.START_DATE)=2022 AND MONTH(HH.START_DATE) BETWEEN 8 AND 10
GROUP BY HH.CAR_ID HAVING COUNT(*) >=5 )
# WHERE YEAR(HH.START_DATE)=2022 AND MONTH(HH.START_DATE) BETWEEN 8 AND 10)
GROUP BY MONTH,CAR_ID HAVING COUNT(*)>0
ORDER BY MONTH,CAR_ID DESC
IN
IN (...) |
괄호 안의 값들 가운데 있음 |
NOT IN (...) |
괄호 안의 값들 가운데 없음 |
LIKE
LIKE '... % ...' |
0~N개 문자를 가진 패턴 |
LIKE '... _ ...' |
_ 갯수만큼의 문자를 가진 패턴 |
소수자리
ROUND |
반올림 |
CEIL |
올림 |
FLOOR |
내림 |
절대값
괄호 中 계산
GREATEST |
(괄호 안에서) 가장 큰 값 |
LEAST
|
(괄호 안에서) 가장 작은 값 |
Column 계산
MAX |
가장 큰 값 |
MIN |
가장 작은 값 |
COUNT |
갯수 (NULL값 제외) |
SUM |
총합 |
AVG |
평균 값 |
SELECT PRODUCT_CODE , SUM(P.PRICE * S.SALES_AMOUNT) AS SALES
FROM PRODUCT P
JOIN OFFLINE_SALE S ON P.PRODUCT_ID = S.PRODUCT_ID
GROUP BY PRODUCT_CODE
ORDER BY SALES DESC , PRODUCT_CODE
SELECT YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH,
COUNT(DISTINCT I.USER_ID) AS PUCHASED_USERS,
ROUND(COUNT(DISTINCT I.USER_ID) / COUNT, 1) AS PUCHASED_RATIO
FROM ONLINE_SALE S
INNER JOIN (
SELECT USER_ID,
COUNT(*) OVER() AS COUNT
FROM USER_INFO
WHERE JOINED BETWEEN '2021-01-01' AND '2021-12-31'
) I ON I.USER_ID = S.USER_ID
GROUP BY YEAR,
MONTH
ORDER BY YEAR,
MONTH
난이도 5개
테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.
즉, 구매한 사람 / 2021에 가입한 전체 회원
1. 먼저 구매한 사람 중에 중복이 있을 수 있으니 DISTINCT 사용
2. 2021에 가입한 전체 회원은 서브 쿼리로 (SELECT COUNT(*) ~~~ 사용)
3. JOINED ON USER_ID
-- 코드를 입력하세요
SELECT YEAR(S.SALES_DATE) AS YEAR, MONTH(S.SALES_DATE) AS MONTH,
COUNT(DISTINCT S.USER_ID) AS PUCHASED_USERS ,
ROUND(COUNT(DISTINCT S.USER_ID)/
(SELECT COUNT(*) FROM USER_INFO
WHERE YEAR(JOINED)=2021)
,1) AS PUCHASED_RATIO
FROM USER_INFO I
JOIN ONLINE_SALE S ON I.USER_ID = S.USER_ID
WHERE I.JOINED LIKE '2021%'
GROUP BY YEAR,MONTH
ORDER BY YEAR,MONTH
제곱
POW(A, B), POWER(A, B) |
A를 B만큼 제곱 |
SQRT |
제곱근 |
정수 버림 - 음수일시 정수(0: 1의 자리 , -1 : 10의 자리)
TRUNCATE(N, n) |
N을 소숫점 n자리까지 선택 |
문자 연산자
대소문자 변환
UCASE, UPPER |
모두 대문자로 |
LCASE, LOWER |
모두 소문자로 |
문자열 이어 붙이기
CONCAT(...) |
괄호 안의 내용 이어붙임 |
CONCAT_WS(S, ...) |
괄호 안의 내용 S로 이어붙임 |
문자열 자르기
SUBSTR, SUBSTRING |
주어진 값에 따라 문자열 자름 |
LEFT |
왼쪽부터 N글자 |
RIGHT |
오른쪽부터 N글자 |
-- 코드를 입력하세요
SELECT LEFT(PRODUCT_CODE,2) AS CATEGORY, COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY LEFT(PRODUCT_CODE,2)
ORDER BY PRODUCT_CODE
문자열 길이
LENGTH |
문자열의 바이트 길이 |
CHAR_LENGTH, CHARACTER_LEGNTH |
문자열의 문자 길이 |
문자열 공백제거
TRIM |
양쪽 공백 제거 |
LTRIM |
왼쪽 공백 제거 |
RTRIM |
오른쪽 공백 제거 |
문자열 이어 붙이기
LPAD(S, N, P) |
S가 N글자가 될 때까지 P를 이어붙임 |
RPAD(S, N, P) |
S가 N글자가 될 때까지 P를 이어붙임 |
문자열 변경
REPLACE(S, A, B) |
S중 A를 B로 변경 |
문자열 인덱스 찾기
INSTR(S, s) |
S중 s의 첫 위치 반환, 없을 시 0 |
문자열 자료형 변경