알고리즘/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 내림

 

절대값

ABS 절대값

괄호 中 계산

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

문자열 자료형 변경

CAST(A, T) A를 T 자료형으로 변환
반응형