ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [My SQL] 숫자 연산자 , 문자 연산자
    알고리즘/My SQL 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 자료형으로 변환
Designed by Tistory.