본문 바로가기
통계프로그램 비교 시리즈/오라클함수 비교(R & Python)

REMAINDER 오라클 함수 [Oracle, Pandas, R Prog, Dplyr, Sqldf, Pandasql, Data.Table, DuckDB]

by 기서무나구물 2021. 12. 14.

포스팅 목차

    * 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크


    [ REMAINDER Oracle Function ]

     


    REMAINDER함수는 n2를 n1으로 나눈 나머지를 반환한다.

     

     


    1. Oracle(오라클)

     

    mod 함수와 동일한 역할을 수행하지만 내부 연산 방법에 차이가 있다.

    • MOD : n2 - n1 * FLOOR (n2 / n1)
    • REMAINDER : n2 - n1 * ROUND (n2 / n1)

     

    Oracle Programming
    SELECT REMAINDER(3, 2), REMAINDER(7F, 3), REMAINDER(5.5D, 1.3F) 
    FROM   DUAL;

     

    Results
    REMAINDER(3,2)	REMAINDER(7F,3)	REMAINDER(5.5D,1.3F)
    -1		1.0E+000	3.0000019073486328E-001

     


     

    Oracle Programming
    SELECT REMAINDER(3, 2)  REMAINDER_1, 
           REMAINDER(5, 2)  REMAINDER_2, 
           REMAINDER(15, 4) REMAINDER_3
    FROM   DUAL;

     

    Results
    REMAINDER_1	REMAINDER_2	REMAINDER_3
    -------------------------------------
    -1	1	-1

     


    2. Python Pandas(파이썬)

     

    % 연산자

    3을 2로 나눈 나머지 값 1을 반환한다.

     

    Python Programming
    3%2

     

    Results
    1

     


    5을 2로 나눈 나머지 값 1을 반환한다.

     

    Python Programming
    5%2

     

    Results
    1

     


    15을 4로 나눈 나머지 값 3을 반환한다.

     

    Python Programming
    15%4

     

    Results
    3

     

     


    3. R Programming (R Package)

     

    %% 연산자

    3을 2로 나눈 나머지 값 1을 반환한다.

     

    R Programming
    %%R
    
    3%%2

     

    Results
    [1] 1

     


    15를 2로 나눈 나머지 값 3을 반환한다.

     

    R Programming
    %%R
    
    15%%4

     

    Results
    [1] 3

     

     


    4. R Dplyr Package

     

    %% 연산자

    mgr 변수를 deptno 변수로 나눈 나머지를 반환한다.

     

    R Programming

     

    %%R
    
    emp %>%
      dplyr::mutate( REMAINDER = mgr %% deptno) %>%
      head()

     

    Results
    # A tibble: 6 x 9
      empno ename  job        mgr hiredate     sal  comm deptno REMAINDER
      <dbl> <chr>  <chr>    <dbl> <date>     <dbl> <dbl>  <dbl>     <dbl>
    1  7369 SMITH  CLERK     7902 1980-12-17   800    NA     20         2
    2  7499 ALLEN  SALESMAN  7698 1981-02-20  1600   300     30        18
    3  7521 WARD   SALESMAN  7698 1981-02-22  1250   500     30        18
    4  7566 JONES  MANAGER   7839 1981-04-02  2975    NA     20        19
    5  7654 MARTIN SALESMAN  7698 1981-09-28  1250  1400     30        18
    6  7698 BLAKE  MANAGER   7839 1981-03-01  2850    NA     30         9

     

     


    5. R sqldf Package

     

    % 연산자

    R Programming
    %%R
    
    sqldf(" SELECT 3%2 mod_1, 5%2 mod_2, 15%4 mod_3, 
                   mod(15,4) mod_4")

     

    Results
      mod_1 mod_2 mod_3 mod_4
    1     1     1     3     3

     

     


    6. Python pandasql Package

     

    % 연산자

    Python Programming
    ps.sqldf(" SELECT 3%2 mod_1, 5%2 mod_2, 15%4 mod_3")

     

    Results
    	mod_1	mod_2	mod_3
    0	1	1	3

     

     


    7. R data.table Package

     

    %% 연산자

    mgr 변수를 deptno 변수로 나눈 나머지를 반환한다.

     

    R Programming
    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    
    DT[,REMAINDER := mgr %% deptno][1:10, ]

     

    Results
        empno  ename       job  mgr   hiredate  sal comm deptno REMAINDER
     1:  7369  SMITH     CLERK 7902 1980-12-17  800   NA     20         2
     2:  7499  ALLEN  SALESMAN 7698 1981-02-20 1600  300     30        18
     3:  7521   WARD  SALESMAN 7698 1981-02-22 1250  500     30        18
     4:  7566  JONES   MANAGER 7839 1981-04-02 2975   NA     20        19
     5:  7654 MARTIN  SALESMAN 7698 1981-09-28 1250 1400     30        18
     6:  7698  BLAKE   MANAGER 7839 1981-03-01 2850   NA     30         9
     7:  7782  CLARK   MANAGER 7839 1981-01-09 2450   NA     10         9
     8:  7788  SCOTT   ANALYST 7566 1982-12-09 3000   NA     20         6
     9:  7839   KING PRESIDENT   NA 1981-11-17 5000   NA     10        NA
    10:  7844 TURNER  SALESMAN 7698 1981-09-08 1500    0     30        18

     


    8. Python Duckdb의 SQL

     

    Python Programming
    %%sql
      SELECT 3%2 mod_1, 5%2 mod_2, 15%4 mod_3

     

    Python Programming
    duckdb.sql(" SELECT 3%2 mod_1, 5%2 mod_2, 15%4 mod_3 ").df()

     

    Results
       mod_1  mod_2  mod_3
    0      1      1      3

     

     


     

    Python Programming
    %%sql
      select typeof(mgr),
             typeof(deptno),
             mgr % deptno as REMAINDER_1
      from   emp
      LIMIT  6

     

     

    Python Programming
    duckdb.sql(" select typeof(mgr),                       \
                        typeof(deptno),                    \
                        mgr % deptno as REMAINDER_1        \
                 from   emp                                \
                 LIMIT  6 ").df()

     

     

    Results
      typeof(mgr) typeof(deptno)  REMAINDER_1
    0      DOUBLE         BIGINT          2.0
    1      DOUBLE         BIGINT         18.0
    2      DOUBLE         BIGINT         18.0
    3      DOUBLE         BIGINT         19.0
    4      DOUBLE         BIGINT         18.0
    5      DOUBLE         BIGINT          9.0

     

     


    History (https://unsplash.com/photos/QNftE1e-2Gc)

      --------------------------------------------  

    [Oracle, Pandas, R Prog, Dplyr, Sqldf, Pandasql, Data.Table] 오라클 함수와 R & Python 비교 사전 목록 링크

     

    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

     

    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 링크
    반응형

    댓글