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

[데이터 추출] 비상관 서브쿼리(Uncorrelated Subqueyr) 를 만족하는 데이터 추출 - 비교 연산자(=) - 89

by 기서무나구물 2022. 9. 26.

포스팅 목차

    89. Display those employees whose manager name is JONES.

     

    * 해당 관리자의 이름이 “JONES”인 직원들의 정보를 출려하시오.


    • Oracle : 비상관 서브쿼리
    • 파이썬 Pandas : tolist()
    • R 프로그래밍 : NOT('!') 연산자, unlist()
    • R Dplyr Package : dplyr::filter(), unlist()
    • R sqldf Package : 비상관 서브쿼리
    • Python pandasql Package : 비상관 서브쿼리
    • R data.table Package : 비교 연산
    • SAS Proc SQL : 비상관 서브쿼리
    • SAS Data Step : Merge 구문, IF 조건문
    • Python Dfply Package : filter_by(), @pipe & Def 사용자 정의 함수
    • 파이썬 Base 프로그래밍 :

     


    1. Oracle(오라클)

    관리자 사원번호(‘mgr’)에서 ‘JONES’의 사원번호를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.

     

    Oracle Programming
    select * 
    from   emp 
    where  mgr = (select empno from emp where ename='JONES');

     

     


    2. Python Pandas(파이썬)

    관리자 사원번호(‘mgr’)가 “JONES”의 사원번호와 일치하는 직원 정보를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.

     

    Python Programming
    emp[ ( emp['mgr'] == (emp[emp['ename']=='JONES']['empno'].tolist()[0]) ) ]
     
     
    Results
    empno ename job mgr hiredate sal comm deptno
    7788 SCOTT ANALYST 7566.0 1982/12/09 3000 NaN 20
    7902 FORD ANALYST 7566.0 1981/12/03 3000 NaN 20

     

     


    3. R Programming (R Package)

    관리자 사원번호(‘mgr’)가 “JONES”의 사원번호와 일치하는 직원 정보를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.

     

    R Programming
    %%R
    
    emp[ (!is.na(emp$mgr)) & emp$mgr == unlist(emp[emp$ename == 'JONES', "empno" ]) ,]

     

    Results
    # A tibble: 2 x 8
      empno ename job       mgr hiredate     sal  comm deptno
      <dbl> <chr> <chr>   <dbl> <date>     <dbl> <dbl>  <dbl>
    1  7788 SCOTT ANALYST  7566 1982-12-09  3000    NA     20
    2  7902 FORD  ANALYST  7566 1981-12-03  3000    NA     20

     


    4. R Dplyr Package

    관리자 사원번호(‘mgr’)가 “JONES”의 사원번호와 일치하는 직원 정보를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.

     

    R Programming
    %%R
    
    emp %>%
      dplyr::filter( mgr == ( emp  %>% dplyr::filter( ename == 'JONES' ) %>% dplyr::select(empno) %>% unlist() )
                   )

     

    Results
    # A tibble: 2 x 8
      empno ename job       mgr hiredate     sal  comm deptno
      <dbl> <chr> <chr>   <dbl> <date>     <dbl> <dbl>  <dbl>
    1  7788 SCOTT ANALYST  7566 1982-12-09  3000    NA     20
    2  7902 FORD  ANALYST  7566 1981-12-03  3000    NA     20

     


    5. R sqldf Package

    관리자 사원번호(‘mgr’)에서 ‘JONES’의 사원번호를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.

     

    R Programming
    %%R
    
    sqldf(" select * 
            from   emp 
            where  mgr = (select empno from emp where ename='JONES');")

     

    Results
      empno ename     job  mgr   hiredate  sal comm deptno
    1  7788 SCOTT ANALYST 7566 1982-12-09 3000   NA     20
    2  7902  FORD ANALYST 7566 1981-12-03 3000   NA     20

     

     


    6. Python pandasql Package

    관리자 사원번호(‘mgr’)에서 ‘JONES’의 사원번호를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.

     

    Python Programming
    ps.sqldf("select * from emp where mgr=(select empno from emp where ename='JONES');")

     

     

    Results
    empno ename job mgr hiredate sal comm deptno
    7788 SCOTT ANALYST 7566.0 1982/12/09 3000 None 20
    7902 FORD ANALYST 7566.0 1981/12/03 3000 None 20

     

     


    7. R data.table Package

    관리자 사원번호(‘mgr’)에서 ‘JONES’의 사원번호를 선택하여서 “JONES”가 관리자로 위치하고 있는 직원들의 정보를 추출한다.

     

    R Programming
    %%R
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    salgrade_DT <- data.table(salgrade)
    
    DT[ (mgr == DT[ename=='JONES', empno ])  , ]

     

    Results
       empno ename     job  mgr   hiredate  sal comm deptno
    1:  7788 SCOTT ANALYST 7566 1982-12-09 3000   NA     20
    2:  7902  FORD ANALYST 7566 1981-12-03 3000   NA     20

     


    8. SAS Proc SQL

     

    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        select * 
        from   emp 
        where  mgr = (select empno from emp where ename='JONES');
    QUIT;
    PROC PRINT;RUN;

     

     

    Results
    empno ename job mgr hiredate sal comm deptno
    7788 SCOTT ANALYST 7566 1982-12-09 3000 . 20
    7902 FORD ANALYST 7566 1981-12-03 3000 . 20

     

     


    9. SAS Data Step

     

    SAS Programming
    %%SAS sas
    
    PROC SORT DATA=emp OUT=EMP_1(RENAME=MGR=EMPNO_BASE);
         BY mgr;
    RUN;
    
    PROC SORT DATA=emp OUT=EMP_2(RENAME=empno=EMPNO_BASE) NODUPKEY;
         BY empno;
         where ename='JONES';
    RUN;
    
    DATA STATSAS_2;
     MERGE EMP_1(IN=A) EMP_2(IN=B);
         BY EMPNO_BASE;
         IF A AND B THEN OUTPUT;
    RUN;
    PROC PRINT;RUN;

     

     

    Results

    empno ename job EMPNO_BASE hiredate sal comm deptno mgr
    7788 JONES MANAGER 7566 1981-04-02 2975 . 20 7839
    7902 FORD ANALYST 7566 1981-12-03 3000 . 20 7839

     


    10. Python Dfply Package

     

    Python Programming
    # [참고] 함수 사용. (52번 예제 참고)
    @pipe
    def pull_fun(df, column=-1):
        return df.loc[:, column].item()
    
    # emp >> filter_by( X.ename == 'JONES') >> select(X.empno) >> pull_list("empno")
    
    emp >> filter_by( X.mgr == (emp >> filter_by( X.ename == 'JONES') >> select(X.empno) >> pull_fun("empno")) )

     

     

    Results

    empno ename job mgr hiredate sal comm deptno
    7788 SCOTT ANALYST 7566.0 1982/12/09 3000 NaN 20
    7902 FORD ANALYST 7566.0 1981/12/03 3000 NaN 20

     


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

    반응형

    댓글