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

[데이터 추출] 관측치 최대값(MAX) 리스트 추출 - 107

by 기서무나구물 2022. 12. 4.

 

107. Display the name of those employees who are getting highest salary.

 

* 최대 급여 수령자의 정보를 출력하시오.


  • Oracle : Max()
  • 파이썬 Pandas : nlargest()
  • R 프로그래밍 : order(), row_number()
  • R Dplyr Package : slice_max(), top_n()
  • R sqldf Package : ROW_NUMBER()
  • Python pandasql Package : Max()
  • R data.table Package : order()
  • SAS Proc SQL : max(), HAVING MAX(), MONOTONIC()
  • SAS Data Step : PROC RANK, N
  • Python Dfply Package : row_number(), min_rank(), nth(), first()
  • 파이썬 Base 프로그래밍 :

 


1. Oracle(오라클)

서브쿼리를 사용하여서 EMP 테이블에서 최대 급여를 검색 후 EMP테이블에서 최대 급여를 수령하는 직원의 정보를 출력한다.

 

Oracle Programming
select empno,ename,sal 
from   emp 
where  sal = (select max(sal) from emp);

 


2. Python Pandas(파이썬)

nlargest() 함수를 사용하여 EMP 테이블에서 최대 급여를 수령하는 직원의 정보를 출력한다.

 

Python Programming
emp.nlargest(1, 'sal')

 

 


Results
  empno ename job mgr hiredate sal comm deptno
8 7839 KING PRESIDENT NaN 1981/11/17 5000 NaN 10

 


3. R Programming (R Package)

emp 테이블을 급여를 기준으로 내림차순으로 정렬 후 최대 급여를 수령하는 직원의 정보를 출력한다.

R Programming
%%R

emp[order(-emp$sal),][1:1, ]

 

 

Results
# A tibble: 1 x 8
  empno ename job         mgr hiredate     sal  comm deptno
  <dbl> <chr> <chr>     <dbl> <date>     <dbl> <dbl>  <dbl>
1  7839 KING  PRESIDENT    NA 1981-11-17  5000    NA     10

 


row_number 함수를 사용하여서 emp 테이블을 급여를 기준으로 내림차순으로 정렬 후 최대 급여를 수령하는 직원의 정보를 출력한다.

 

R Programming
%%R

filter(emp, row_number(desc(sal)) <= 1)

 

 

Results
# A tibble: 1 x 8
  empno ename job         mgr hiredate     sal  comm deptno
  <dbl> <chr> <chr>     <dbl> <date>     <dbl> <dbl>  <dbl>
1  7839 KING  PRESIDENT    NA 1981-11-17  5000    NA     10

 


4. R Dplyr Package

slice_max() 함수를 사용하여서 EMP 테이블에서 최대 급여를 수령하는 직원의 정보를 출력한다.

 

R Programming
%%R

emp %>% 
  slice_max(sal, n = 1)

 

 

Results
# A tibble: 1 x 8
  empno ename job         mgr hiredate     sal  comm deptno
  <dbl> <chr> <chr>     <dbl> <date>     <dbl> <dbl>  <dbl>
1  7839 KING  PRESIDENT    NA 1981-11-17  5000    NA     10

 


top_n() 함수를 사용하여서 EMP 테이블에서 최대 급여를 수령하는 직원의 정보를 출력한다.

 

R Programming
%%R

emp %>% 
  top_n(1, sal)

 

 

Results
# A tibble: 1 x 8
  empno ename job         mgr hiredate     sal  comm deptno
  <dbl> <chr> <chr>     <dbl> <date>     <dbl> <dbl>  <dbl>
1  7839 KING  PRESIDENT    NA 1981-11-17  5000    NA     10

 


5. R sqldf Package

서브쿼리를 사용하여서 EMP 테이블에서 최대 급여를 검색 후 EMP테이블에서 최대 급여를 수령하는 직원의 정보를 출력한다.

 

R Programming
%%R

sqldf(" select empno,ename,sal 
        from   emp 
        where  sal = (select max(sal) from emp);")

 

 

Results
  empno ename  sal
1  7839  KING 5000

 


ROW_NUMBER() 함수를 사용하여서 emp 테이블을 급여를 기준으로 내림차순으로 정렬 후 급여 최대 급여를 수령하는 직원의 정보를 출력한다.

 

R Programming
%%R

sqldf("select *
       from   ( select *, ROW_NUMBER() OVER(ORDER BY sal desc) AS row_rank from emp )
       where  row_rank = 1")

 

 

Results
  empno ename       job mgr   hiredate  sal comm deptno row_rank
1  7839  KING PRESIDENT  NA 1981-11-17 5000   NA     10        1

 


6. Python pandasql Package

 

Python Programming
ps.sqldf(" select empno,ename,sal                    \
           from   emp                                \
           where  sal = (select max(sal) from emp);")

 

 

Results
  empno ename sal
0 7839 KING 5000

 


7. R data.table Package

emp 테이블을 급여를 기준으로 내림차순으로 정렬 후 최대 급여를 수령하는 직원의 정보를 출력한다.

 

R Programming
%%R

DT          <- data.table(emp)
dept_DT     <- data.table(dept)
salgrade_DT <- data.table(salgrade)

DT[order(-DT$sal),][1:1, ]

 

 

Results
   empno ename       job mgr   hiredate  sal comm deptno
1:  7839  KING PRESIDENT  NA 1981-11-17 5000   NA     10

 


8. SAS Proc SQL

 

SAS Programming
%%SAS sas

PROC SQL;
  CREATE TABLE STATSAS_1 AS
    select empno,ename,sal 
    from   emp 
    where  sal=(select max(sal) from emp);
QUIT;
PROC PRINT;RUN;

 

 


Results
OBS empno ename sal
1 7839 KING 5000

 


 

SAS Programming
%%SAS sas

PROC SQL;
  create table STATSAS_2 as
    SELECT A.*
    FROM   EMP A
    HAVING MAX(A.SAL) = A.SAL;
QUIT;
PROC PRINT;RUN;

 


Results
OBS empno ename job mgr hiredate sal comm deptno
1 7839 KING PRESIDEN . 1981-11-17 5000 . 10

 


  • PROC SQL로 구현(사전 PROC SORT);
SAS Programming
%%SAS sas

PROC SQL;
  CREATE TABLE EMP_1 AS
    select e.*
    from   emp e 
    order 
       by  sal;

  CREATE TABLE STATSAS_3 AS
    SELECT A.*,
           MONOTONIC()      AS VAR3,
           MAX(MONOTONIC()) AS VAR4
    FROM   EMP_1 A
    HAVING MONOTONIC() = MAX(MONOTONIC());
quit;
PROC PRINT;RUN;

 

 

Results
OBS empno ename job mgr hiredate sal comm deptno VAR3 VAR4
1 7839 KING PRESIDEN . 1981-11-17 5000 . 10 1 14

 


9. SAS Data Step

RANK 프로시져 사용;

SAS Programming
%%SAS sas

PROC RANK DATA=EMP OUT=STATSAS_4(WHERE=(RANK=1)) DESCENDING;
     RANKS RANK;
     VAR SAL ;
RUN;
PROC PRINT;RUN;

 

 


Results
OBS empno ename job mgr hiredate sal comm deptno RANK
1 7839 KING PRESIDEN . 1981-11-17 5000 . 10 1

 


 

SAS Programming
%%SAS sas

PROC SORT DATA=EMP OUT=EMP_1;
     BY DESCENDING SAL;
RUN;
DATA STATSAS_5;
 SET EMP_1;
     BY DESCENDING SAL;
     IF _N_ = 1;
RUN;
PROC PRINT;RUN;

 

 

Results
OBS empno ename job mgr hiredate sal comm deptno
1 7839 KING PRESIDEN . 1981-11-17 5000 . 10

 


10. Python Dfply Package

row_number() 함수

Python Programming
emp >> mutate(row_rank=row_number(X.sal, ascending=False)) >> filter_by(X.row_rank == 1)

 


Results
  empno ename job mgr hiredate sal comm deptno row_rank
8 7839 KING PRESIDENT NaN 1981/11/17 5000 NaN 10 1.0

 


min_rank() 함수

Python Programming
emp >> mutate(row_rank=min_rank(X.sal, ascending=False)) >> filter_by(X.row_rank == 1)

 

Results
  empno ename job mgr hiredate sal comm deptno row_rank
8 7839 KING PRESIDENT NaN 1981/11/17 5000 NaN 10 1.0

 


[참고] nth() 함수

Python Programming
emp >> arrange(~X.sal) >>  summarize(sal_1th = nth(X.sal,0))

Results
  sal_1th0
0 5000

 


Python Programming
emp >> arrange(~X.sal) >>  summarize(sal_1th = first(X.sal))

Results
  sal_1th0
0 5000

 


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

반응형

댓글