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

[비상관 서브쿼리] 특정 조건을 만족하는 데이터 추출 - 167 (오라클 SQL, R, Python, SAS)

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

포스팅 목차

     

    167. display the department where there are no employees

     

    * 인사 정보(‘EMP’)테이블을 조회하여 부서 정보(‘DEPT’)테이블에서 별도의 부서원이 존재하지 않는 부서 정보를 출력하시오.


    • 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
    • [데이터 추출] 특정 조건을 만족하는 데이터 추출 - 비상관 서브쿼리(중복 제거를 통한 유일한 값 추출), Not in 연산자
    • 데이터 전처리 - SQL, Pandas, R Prog, Dplyr, Dfply, SQLDF, PANDASQL, DATA.TABLE, SAS, Proc Sql
    • 유사문제 : 81 / 82 / 86 / 111/ 112/ 118 /131/ 134/ 120/ 137/ 138/ 151/ 158
    • distinct : 82
    • Oracle : 비상관 서브쿼리, Distinct 중복 제거, Not in 연산자
    • 파이썬 Pandas : NOT('~') 연산자, isin(), unique() 중복 제거
    • R 프로그래밍 : NOT('!') 연산자, %in%, unlist(), unique()
    • R Dplyr Package : NOT('!') 연산자, dplyr::distinct() 중복 제거, unlist()
    • R sqldf Package : 비상관 서브쿼리, Distinct 중복 제거, Not in 연산자
    • Python pandasql Package : 비상관 서브쿼리, Distinct 중복 제거, Not in 연산자
    • R data.table Package : NOT('!') 연산자, unlist(), unique() 중복 제거
    • SAS Proc SQL : 비상관 서브쿼리, Distinct 중복 제거, Not in 연산자
    • SAS Data Step : Proc sort의 nodupkey, Merge 구문, IF 조건문
    • Python Dfply Package : @pipe 와 def 사용자 정의 함수(pull_list), isin(), distinct()
    • 파이썬 Base 프로그래밍 :

     


    1. Oracle(오라클)

    부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하지 않아서 반환되는 부서코드(‘deptno’)가 존재하지 않는 부서 정보를 출력한다.

     

    Oracle Programming
    select deptno,dname 
    from   dept 
    where  deptno not in (select distinct(deptno) from emp);

     


    2. Python Pandas(파이썬)

    부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하여 반환되는 부서코드(‘deptno’)가 존재하는 부서를 제외(‘~’)하고 부서원이 존재하지 않는 하지 않는 부서 정보를 출력한다.

     

    Python Programming
    dept[~ dept['deptno'].isin(emp['deptno'].unique())]

     


    Results
      deptno dname loc
    3 40 OPERATIONS BOSTON

     


    3. R Programming (R Package)

    부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하여 반환되는 부서코드(‘deptno’)가 존재하는 부서를 제외(‘!’)하고 부서원이 존재하지 않는 하지 않는 부서 정보를 출력한다.

     

    R Programming
    %%R
    
    dept[! (dept$deptno %in% unlist(unique(emp['deptno']))), ]

     

    Results
    # A tibble: 1 x 3
      deptno dname      loc   
       <dbl> <chr>      <chr> 
    1     40 OPERATIONS BOSTON

     


    4. R Dplyr Package

    부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하는 부서코드(‘deptno’)를 제외(‘!’)하고 부서원이 존재하지 않는 하지 않는 부서 정보를 출력한다.

     

    R Programming
    %%R
    
    dept %>%
      dplyr::filter( ! deptno %in% ( emp  %>% dplyr::distinct(deptno)  %>% unlist()  ))

     

    Results
    # A tibble: 1 x 3
      deptno dname      loc   
       <dbl> <chr>      <chr> 
    1     40 OPERATIONS BOSTON

     


    5. R sqldf Package

    부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하지 않아서 반환되는 부서코드(‘deptno’)가 존재하지 않는 부서 정보를 출력한다.

     

    R Programming
    %%R
    
    sqldf(" select deptno,dname 
            from   dept 
            where  deptno not in (select distinct(deptno) from emp); ")

     

    Results
      deptno      dname
    1     40 OPERATIONS

     


    6. Python pandasql Package

    부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하지 않아서 반환되는 부서코드(‘deptno’)가 존재하지 않는 부서 정보를 출력한다.

     

    Python Programming
    ps.sqldf(" select deptno,dname from dept \
               where  deptno not in (select distinct(deptno) from emp); ")

     


    Results
      deptno dname
    0 40 OPERATIONS

     


    7. R data.table Package

    부서 정보(‘dept_DT’)테이블의 부서번호(‘deptno’)가 인사 정보(‘DT’)테이블의 부서번호(‘deptno’)에 존재하는 부서코드(‘deptno’)를 제외(‘!’)하고 부서원이 존재하지 않는 하지 않는 부서 정보를 출력한다.

     

    R Programming
    %%R
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    
    dept_DT[!deptno %in% unlist(unique(DT[,.(deptno)]))]

     

    Results
       deptno      dname    loc
    1:     40 OPERATIONS BOSTON

     


    8. SAS Proc SQL

    부서 정보(‘DEPT’)테이블의 부서번호(‘deptno’)을 기준으로 인사 정보(‘EMP’)테이블을 조회하여 부서원이 존재하지 않아서 반환되는 부서코드(‘deptno’)가 존재하지 않는 부서 정보를 출력한다.

     

    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        select deptno,dname,loc
        from   dept 
        where  deptno not in (select distinct(deptno) from emp);
    QUIT;
    PROC PRINT;RUN;

     


    Results
    OBS deptno dname loc
    1 40 OPERATIONS BOSTON

     


    9. SAS Data Step

     

    SAS Programming
    %%SAS sas
    
    PROC SORT DATA=dept OUT=dept_1;
         BY deptno;
    RUN;
    
    PROC SORT DATA=emp OUT=emp_1 nodupkey;
         BY deptno;
    RUN;
    
    DATA STATSAS_2;
     MERGE dept_1(IN=A) emp_1(IN=B);
         BY deptno;
         IF A AND B=0;
         keep deptno dname loc;
    RUN;
    PROC SORT DATA=STATSAS_2;
         BY deptno;
    RUN;
    PROC PRINT;RUN;

     

    Results
    OBS deptno dname loc
    1 40 OPERATIONS BOSTON

     


    10. Python Dfply Package

     

    Python Programming
    # [참고] 함수 사용. (52번 예제 참고) : AttributeError: 'DataFrame' object has no attribute 'ix'
    @pipe
    def pull_list(df, column=-1):
        return df.loc[:, column]
    
    dept >>\
      filter_by (~ X.deptno.isin( emp >> distinct(X.deptno) >> pull_list("deptno")))

     


    Results
      deptno dname loc
    3 40 OPERATIONS BOSTON

     


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

    반응형

    댓글