포스팅 목차
107. Display the name of those employees who are getting highest salary.
* 최대 급여 수령자의 정보를 출력하시오.
- 관련예제 : 106번
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- 최대값(MAX) 에 해당하는 관측치 정보 추출
- 데이터 전처리 - SQL, Pandas, R Prog, Dplyr, Dfply, SQLDF, PANDASQL, DATA.TABLE, SAS, Proc Sql
|
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 예제로 만나는 테이블 데이터 전처리 방법 리스트
'통계프로그램 비교 시리즈 > 프로그래밍비교(Oracle,Python,R,SAS)' 카테고리의 다른 글
[데이터 추출] 그룹 집계 후 특정 조건을 만족하는 그룹의 집계 통계량 출력 - 109 (0) | 2022.12.05 |
---|---|
[데이터 추출] 최소값과 최대값 계산하기 - 108 (0) | 2022.12.05 |
[데이터 정렬 - 내림차순 정렬] 수치형 데이터를 기준으로 내림차순 정렬 - 37 (오라클 SQL, R, Python, SAS) (0) | 2022.10.31 |
[데이터 추출] 상위 Top 5 관측치 추출하기 - 106 (0) | 2022.10.03 |
[데이터 추출] Left Join 과 데이터 상하 결합(UNION) - 105 (0) | 2022.10.03 |
댓글