본문 바로가기
통계프로그램 비교 시리즈/프로그래밍비교(Oracle,Python,R,SAS)

[데이터 정렬] 오름차순과 내림차순 정렬 - 165 (오라클 SQL, R, Python, SAS)

by 기서무나구물 2023. 3. 29.

포스팅 목차

     

    165. find out the most recently hired employees in each dept order by hire date

     

    * 개별 부서별로 입사일자를 내림차순 기준으로 정렬하여서 최근에 입사한 직원들의 정보를 확인하시오.


    • 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
    • [데이터 정렬] 오름차순과 내림차순 정렬
    • 데이터 전처리 - SQL, Pandas, R Prog, Dplyr, Dfply, SQLDF, PANDASQL, DATA.TABLE, SAS, Proc Sql
    • Oracle : Order by 구문의 내림차순(Desc), 오름차순(Asc)
    • 파이썬 Pandas : sort_values()의 ascending 인수
    • R 프로그래밍 : arrange() 의 desc(), order()의 내림차순('-') 인수, xtfrm(), with(), as.numeric()
    • R Dplyr Package : dplyr::arrange()의 내림차순(Desc)
    • R sqldf Package : Order by 구문의 내림차순(Desc), 오름차순(Asc)
    • Python pandasql Package : Order by 구문의 내림차순(Desc), 오름차순(Asc)
    • R data.table Package : data.table::setorder()의 내림차순('-') 인수, order()의 내림차순('-') 인수
    • SAS Proc SQL : Order by 구문의 내림차순(Desc), 오름차순(Asc)
    • SAS Data Step : Proc sort의 내림차순('Descending')
    • Python Dfply Package : arrange()의 내림차순(Desc)
    • 파이썬 Base 프로그래밍 :

     


    1. Oracle(오라클)

    사원 정보(EMP) 테이블을 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순으로 정렬하여 출력한다.

     

    Oracle Programming
    select * 
    from   emp 
    order 
       by  deptno,hiredate desc;

     


    2. Python Pandas(파이썬)

    사원 정보(EMP) 테이블을 sort_values() 함수의 ascending 인수를 사용하여 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순으로 정렬하여 출력한다.

     

    Python Programming
    emp.sort_values(by=['deptno','hiredate'], ascending=[True, False], axis = 0).head()

     


    Results
      empno ename job mgr hiredate sal comm deptno
    13 7934 MILLER CLERK 7782.0 1982/01/23 1300 NaN 10
    8 7839 KING PRESIDENT NaN 1981/11/17 5000 NaN 10
    6 7782 CLARK MANAGER 7839.0 1981/01/09 2450 NaN 10
    10 7876 ADAMS CLERK 7788.0 1983/01/12 1100 NaN 20
    7 7788 SCOTT ANALYST 7566.0 1982/12/09 3000 NaN 20

     


    3. R Programming (R Package)

    사원 정보(EMP) 테이블을 arrange() 함수를 사용하여 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순(‘desc’)으로 정렬하여 출력한다.

    • 날짜 형식은 Descending을 지정하기 위하여 “-“ 가 지원 안 함.

     

    R Programming
    %%R
    
    arrange ( emp, deptno, desc(hiredate) )

     

    Results
    # A tibble: 14 x 8
       empno ename  job         mgr hiredate     sal  comm deptno
       <dbl> <chr>  <chr>     <dbl> <date>     <dbl> <dbl>  <dbl>
     1  7934 MILLER CLERK      7782 1982-01-23  1300    NA     10
     2  7839 KING   PRESIDENT    NA 1981-11-17  5000    NA     10
     3  7782 CLARK  MANAGER    7839 1981-01-09  2450    NA     10
     4  7876 ADAMS  CLERK      7788 1983-01-12  1100    NA     20
     5  7788 SCOTT  ANALYST    7566 1982-12-09  3000    NA     20
     6  7902 FORD   ANALYST    7566 1981-12-03  3000    NA     20
     7  7566 JONES  MANAGER    7839 1981-04-02  2975    NA     20
     8  7369 SMITH  CLERK      7902 1980-12-17   800    NA     20
     9  7900 JAMES  CLERK      7698 1981-12-03   950    NA     30
    10  7654 MARTIN SALESMAN   7698 1981-09-28  1250  1400     30
    11  7844 TURNER SALESMAN   7698 1981-09-08  1500     0     30
    12  7698 BLAKE  MANAGER    7839 1981-03-01  2850    NA     30
    13  7521 WARD   SALESMAN   7698 1981-02-22  1250   500     30
    14  7499 ALLEN  SALESMAN   7698 1981-02-20  1600   300     30

     


    사원 정보(EMP) 테이블을 order() 함수를 사용하여 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순(‘-(xtfrm())’)으로 정렬하여 출력한다.

     

    Sort data frame by character and date columns

    I'm trying to sort a simple dataset by a character column (descending) and a date variable (ascending). fx_code date fx_spot 1 AUD 2000-01-31 0.6370 2 AUD 2000-02-29 0.6178 ...

    stackoverflow.com

     

    R Programming
    %%R
    
    emp[ order(emp$deptno, -(xtfrm( emp$hiredate ))), ] %>% head()

     

    Results
    # A tibble: 6 x 8
      empno ename  job         mgr hiredate     sal  comm deptno
      <dbl> <chr>  <chr>     <dbl> <date>     <dbl> <dbl>  <dbl>
    1  7934 MILLER CLERK      7782 1982-01-23  1300    NA     10
    2  7839 KING   PRESIDENT    NA 1981-11-17  5000    NA     10
    3  7782 CLARK  MANAGER    7839 1981-01-09  2450    NA     10
    4  7876 ADAMS  CLERK      7788 1983-01-12  1100    NA     20
    5  7788 SCOTT  ANALYST    7566 1982-12-09  3000    NA     20
    6  7902 FORD   ANALYST    7566 1981-12-03  3000    NA     20

     


    사원 정보(EMP) 테이블을 order() 함수를 사용하여 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순(‘-(xtfrm())’)으로 정렬하여 출력한다.

     

    R Programming
    %%R
    
    emp[ with(emp, order(deptno, -xtfrm(hiredate))) , ] %>% head()

     

    Results
    # A tibble: 6 x 8
      empno ename  job         mgr hiredate     sal  comm deptno
      <dbl> <chr>  <chr>     <dbl> <date>     <dbl> <dbl>  <dbl>
    1  7934 MILLER CLERK      7782 1982-01-23  1300    NA     10
    2  7839 KING   PRESIDENT    NA 1981-11-17  5000    NA     10
    3  7782 CLARK  MANAGER    7839 1981-01-09  2450    NA     10
    4  7876 ADAMS  CLERK      7788 1983-01-12  1100    NA     20
    5  7788 SCOTT  ANALYST    7566 1982-12-09  3000    NA     20
    6  7902 FORD   ANALYST    7566 1981-12-03  3000    NA     20

     


    사원 정보(EMP) 테이블을 order() 함수를 사용하여 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순(‘-(xtfrm())’)으로 정렬하여 출력한다.

    R Programming
    %%R
    
    emp[ order(emp$deptno, -(as.numeric( emp$hiredate ))), ] %>% head()

     

    Results
    # A tibble: 6 x 8
      empno ename  job         mgr hiredate     sal  comm deptno
      <dbl> <chr>  <chr>     <dbl> <date>     <dbl> <dbl>  <dbl>
    1  7934 MILLER CLERK      7782 1982-01-23  1300    NA     10
    2  7839 KING   PRESIDENT    NA 1981-11-17  5000    NA     10
    3  7782 CLARK  MANAGER    7839 1981-01-09  2450    NA     10
    4  7876 ADAMS  CLERK      7788 1983-01-12  1100    NA     20
    5  7788 SCOTT  ANALYST    7566 1982-12-09  3000    NA     20
    6  7902 FORD   ANALYST    7566 1981-12-03  3000    NA     20

     


    4. R Dplyr Package

    사원 정보(EMP) 테이블을 arrange() 함수를 사용하여 1차적으로 부서번호(‘deptno’)를 기준으로 오름차순 정렬하고, 2차로 입사일자(‘hiredate’)를 기준으로 내림차순(‘-(xtfrm())’)으로 정렬하여 출력한다.

    R Programming
    %%R
    
    emp %>% 
      dplyr::arrange(deptno, desc(hiredate)) %>%
      head()

     

    Results
    # A tibble: 6 x 8
      empno ename  job         mgr hiredate     sal  comm deptno
      <dbl> <chr>  <chr>     <dbl> <date>     <dbl> <dbl>  <dbl>
    1  7934 MILLER CLERK      7782 1982-01-23  1300    NA     10
    2  7839 KING   PRESIDENT    NA 1981-11-17  5000    NA     10
    3  7782 CLARK  MANAGER    7839 1981-01-09  2450    NA     10
    4  7876 ADAMS  CLERK      7788 1983-01-12  1100    NA     20
    5  7788 SCOTT  ANALYST    7566 1982-12-09  3000    NA     20
    6  7902 FORD   ANALYST    7566 1981-12-03  3000    NA     20

     


    5. R sqldf Package

    사원 정보(EMP) 테이블을 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순으로 정렬하여 출력한다.

     

    R Programming
    %%R
    
    sqldf(" select * 
            from   emp 
            order 
               by  deptno,hiredate desc;") %>% head

     

    Results
      empno  ename       job  mgr   hiredate  sal comm deptno
    1  7934 MILLER     CLERK 7782 1982-01-23 1300   NA     10
    2  7839   KING PRESIDENT   NA 1981-11-17 5000   NA     10
    3  7782  CLARK   MANAGER 7839 1981-01-09 2450   NA     10
    4  7876  ADAMS     CLERK 7788 1983-01-12 1100   NA     20
    5  7788  SCOTT   ANALYST 7566 1982-12-09 3000   NA     20
    6  7902   FORD   ANALYST 7566 1981-12-03 3000   NA     20

     


    6. Python pandasql Package

    사원 정보(EMP) 테이블을 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순으로 정렬하여 출력한다.

    Python Programming
    ps.sqldf(" select * from emp \
               order by deptno,hiredate desc; ").head()

     


    Results
      empno ename job mgr hiredate sal comm deptno
    0 7934 MILLER CLERK 7782.0 1982/01/23 1300 NaN 10
    1 7839 KING PRESIDENT NaN 1981/11/17 5000 NaN 10
    2 7782 CLARK MANAGER 7839.0 1981/01/09 2450 NaN 10
    3 7876 ADAMS CLERK 7788.0 1983/01/12 1100 NaN 20
    4 7788 SCOTT ANALYST 7566.0 1982/12/09 3000 NaN 20

     


    7. R data.table Package

    사원 정보(DT) 테이블을 setorder() 함수를 사용하여 1차적으로 부서번호(‘deptno’)를 기준으로 오름차순 정렬하고, 2차로 입사일자(‘hiredate’)를 기준으로 내림차순(‘-‘)으로 정렬하여 출력한다.

    R Programming
    %%R
    
    DT <- data.table(emp)
    
    data.table::setorder(DT,deptno,-hiredate)
    
    DT[1:5, ]

     

    Results
       empno  ename       job  mgr   hiredate  sal comm deptno
    1:  7934 MILLER     CLERK 7782 1982-01-23 1300   NA     10
    2:  7839   KING PRESIDENT   NA 1981-11-17 5000   NA     10
    3:  7782  CLARK   MANAGER 7839 1981-01-09 2450   NA     10
    4:  7876  ADAMS     CLERK 7788 1983-01-12 1100   NA     20
    5:  7788  SCOTT   ANALYST 7566 1982-12-09 3000   NA     20

     


    사원 정보(DT) 테이블을 order() 함수를 사용하여 1차적으로 부서번호(‘deptno’)를 기준으로 오름차순 정렬하고, 2차로 입사일자(‘hiredate’)를 기준으로 내림차순(‘-‘)으로 정렬하여 출력한다.

    R Programming
    %%R
    
    DT <- data.table(emp)
    
    # DT[order(deptno, -as.character(hiredate)),]
    DT[ order(deptno, -hiredate) , ][1:5, ]

     

    Results
       empno  ename       job  mgr   hiredate  sal comm deptno
    1:  7934 MILLER     CLERK 7782 1982-01-23 1300   NA     10
    2:  7839   KING PRESIDENT   NA 1981-11-17 5000   NA     10
    3:  7782  CLARK   MANAGER 7839 1981-01-09 2450   NA     10
    4:  7876  ADAMS     CLERK 7788 1983-01-12 1100   NA     20
    5:  7788  SCOTT   ANALYST 7566 1982-12-09 3000   NA     20

     


    8. SAS Proc SQL

    사원 정보(EMP) 테이블을 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순으로 정렬하여 출력한다.

    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        select * 
        from   emp 
        order 
           by  deptno,hiredate desc;
    QUIT;
    PROC PRINT data=STATSAS_1(obs=3);RUN;

     


    Results
    OBS empno ename job mgr hiredate sal comm deptno
    1 7934 MILLER CLERK 7782 1982-01-23 1300 . 10
    2 7839 KING PRESIDEN . 1981-11-17 5000 . 10
    3 7782 CLARK MANAGER 7839 1981-01-09 2450 . 10

     


    9. SAS Data Step

     

    SAS Programming
    %%SAS sas
    
    PROC SORT DATA=EMP OUT=EMP_1;
         BY deptno DESCENDING hiredate;
    RUN;
    PROC PRINT data=EMP_1(obs=3);RUN;

     


    Results
    OBS empno ename job mgr hiredate sal comm deptno
    1 7934 MILLER CLERK 7782 1982-01-23 1300 . 10
    2 7839 KING PRESIDEN . 1981-11-17 5000 . 10
    3 7782 CLARK MANAGER 7839 1981-01-09 2450 . 10

     


    10. Python Dfply Package

     

    Python Programming
    emp >> \
      arrange(X.deptno, desc(X.hiredate) ) >> \
      head()

     

    Results
      empno ename job mgr hiredate sal comm deptno
    13 7934 MILLER CLERK 7782.0 1982/01/23 1300 NaN 10
    8 7839 KING PRESIDENT NaN 1981/11/17 5000 NaN 10
    6 7782 CLARK MANAGER 7839.0 1981/01/09 2450 NaN 10
    10 7876 ADAMS CLERK 7788.0 1983/01/12 1100 NaN 20
    7 7788 SCOTT ANALYST 7566.0 1982/12/09 3000 NaN 20

     


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

    반응형

    댓글