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

[총건수 카운트] 특정 조건을 만족하는 데이터 집계 - 155 (오라클 SQL, R, Python, SAS)

by 기서무나구물 2023. 1. 9.

포스팅 목차

    155. Find out how many managers are there without listing them.

     

    * 관리자 역할을 수행하고 있는 직원들의 수를 집계하시오.


    • 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
    • 26 / 42 / 137
    • 유사문제 : 23 / 58 / 84/ 100 / 86/ 137번 리스트
    • [데이터 집계] 특정 조건을 만족하는 데이터 집계 - 총건수 카운트
    • 데이터 전처리 - SQL, Pandas, R Prog, Dplyr, Dfply, SQLDF, PANDASQL, DATA.TABLE, SAS, Proc Sql
    • Oracle : 비상관 서브쿼리, Count(*)
    • 파이썬 Pandas : isin(), agg()의 ['count'], Count()
    • R 프로그래밍 : nrow(), unlist()
    • R Dplyr Package : %in%, unlist(), dplyr::summarise() 의 n()
    • R sqldf Package : 비상관 서브쿼리, Count(*)
    • Python pandasql Package : 비상관 서브쿼리, Count(*)
    • R data.table Package : %in%, .N
    • SAS Proc SQL : 비상관 서브쿼리, Count(*)
    • SAS Data Step : PROC SORT의 Nodupkey 중복 제거, Merge 구문, IF 조건문, Proc Summary의 N,
    • Python Dfply Package : @pipe 와 def 사용자 정의 함수(pull_list), isin(), summarize()의 count()
    • 파이썬 Base 프로그래밍 :

     


    1. Oracle(오라클)

    서브쿼리를 통하여 emp테이블의 관리자 사원번호(‘mgr’)에 명단이 존재하는 사원번호(‘empno’)를 선택하여 사원수를 집계한다.

     

    Oracle Programming
    Select count (*) emp_cnt
    from   EMP 
    where  empno in (select mgr from EMP);

     

     


    2. Python Pandas(파이썬)

    isin 함수를 사용하여 emp테이블의 관리자 사원번호(‘mgr’)에 명단이 존재하는 사원번호(‘empno’)를 선택한 후 사원수를 집계한다.

     

    Python Programming
    emp[ emp['empno'].isin(emp['mgr']) ].agg({'empno':['count']})

     


    Results
      empno
    count 6

     


     

    Python Programming
    emp[ emp['empno'].isin(emp['mgr']) ]['empno'].count()

     

    Results
    6

     

     


    3. R Programming (R Package)

    %in% 함수를 사용하여 emp테이블의 관리자 사원번호(‘mgr’)에 명단이 존재하는 사원번호(‘empno’)를 선택하여 사원수를 집계한다.

     

    R Programming
    %%R
    nrow( emp[ emp$empno %in% unlist(emp$mgr)  ,  ] )

     

    Results
    [1] 6

     

     


    4. R Dplyr Package

    %in% 함수를 사용하여 emp테이블의 관리자 사원번호(‘mgr’)에 명단이 존재하는 사원번호(‘empno’)를 선택 후 filter() 함수를 통하여 선택된 사원들의 수를 집계한다.

     

    R Programming
    %%R
    emp %>% 
      dplyr::filter( empno %in% ( emp %>% dplyr::select(mgr) %>% unlist() ) ) %>% 
      dplyr::summarise(emp_cnt = n())

     

    Results
    # A tibble: 1 x 1
      emp_cnt
        <int>
    1       6

     

     


    5. R sqldf Package

    emp 테이블의 사원번호(‘empno’)가 서브쿼리의 관리자 사원번호(‘mgr’) 리스트에 명단이 존재하는 사원들의 정보를 선택하여서 관리자 역할을 수행하고 있는 사원들의 수를 집계한다.

     

    R Programming
    %%R
    
    sqldf(" Select count (*) emp_cnt
            from   emp 
            where  empno in (select mgr from emp);")

     

    Results
      emp_cnt
    1       6

     

     


    6. Python pandasql Package

    서브쿼리를 통하여 emp테이블의 관리자 사원번호(‘mgr’)에 명단이 존재하는 사원번호(‘empno’)를 선택하여 사원수를 집계한다.

     

    Python Programming
    ps.sqldf(" Select count (*) emp_cnt       \
               from   emp                     \
               where  empno in (select mgr from emp);")

     

    Results
      emp_cnt
    0 6

     

     


    7. R data.table Package

    %in% 함수를 통하여 emp테이블의 관리자 사원번호(‘mgr’)에 명단이 존재하는 사원번호(‘empno’)를 선택한 후 집계한다.

     

    R Programming
    %%R
    
    DT <- data.table(emp)
    
    DT[empno %in% DT[,mgr], .('count' = .N) ]

     

    Results
       count
    1:     6

     

     


    8. SAS Proc SQL

    서브쿼리를 통하여 emp테이블의 관리자 사원번호(‘mgr’)에 명단이 존재하는 사원번호(‘empno’)를 선택하여 사원수를 집계한다.

     

    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        Select count (*) AS emp_cnt
        from   EMP 
        where  empno in (select mgr from EMP);
    QUIT;
    PROC PRINT;RUN;

     

    Results
    OBS emp_cnt
    1 6

     

     


    9. SAS Data Step

     

    SAS Programming
    %%SAS sas
    
    PROC SORT DATA=emp OUT=EMP_1(RENAME=EMPNO=JOIN_KEY);
         BY EMPNO;
    RUN;
    
    PROC SORT DATA=emp OUT=EMP_2(RENAME=mgr=JOIN_KEY) NODUPKEY;
         BY mgr;
         where mgr is not null;
    RUN;
    
    DATA STATSAS_2;
     MERGE EMP_1(IN=A) EMP_2(IN=B);
         BY JOIN_KEY;
         IF A AND B;
    RUN;
    
    PROC SUMMARY DATA=STATSAS_2;
         VAR EMPNO;
         OUTPUT OUT=STATSAS_3(DROP=_:) N=;
    QUIT;
    PROC PRINT;RUN;

     

    Results
    OBS empno
    1 6

     

     


    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]
    
    emp >> \
      filter_by( X.empno.isin( emp>>select(X.mgr) >> pull_list('mgr'))) >>\
      summarize(emp_cnt = X.empno.count())

     

    Results
      emp_cnt
    0 6

     

     


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

    반응형

    댓글