포스팅 목차
165. find out the most recently hired employees in each dept order by hire date
* 개별 부서별로 입사일자를 내림차순 기준으로 정렬하여서 최근에 입사한 직원들의 정보를 확인하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- [데이터 정렬] 오름차순과 내림차순 정렬
- 데이터 전처리 - SQL, Pandas, R Prog, Dplyr, Dfply, SQLDF, PANDASQL, DATA.TABLE, SAS, Proc Sql
|
1. Oracle(오라클)
사원 정보(EMP) 테이블을 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순으로 정렬하여 출력한다.
Oracle Programming |
select *
from emp
order
by deptno,hiredate desc;
2. Python Pandas(파이썬)
사원 정보(EMP) 테이블을 sort_values() 함수의 ascending 인수를 사용하여 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순으로 정렬하여 출력한다.
Python Programming |
emp.sort_values(by=['deptno','hiredate'], ascending=[True, False], axis = 0).head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
13 | 7934 | MILLER | CLERK | 7782.0 | 1982/01/23 | 1300 | NaN | 10 |
8 | 7839 | KING | PRESIDENT | NaN | 1981/11/17 | 5000 | NaN | 10 |
6 | 7782 | CLARK | MANAGER | 7839.0 | 1981/01/09 | 2450 | NaN | 10 |
10 | 7876 | ADAMS | CLERK | 7788.0 | 1983/01/12 | 1100 | NaN | 20 |
7 | 7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | NaN | 20 |
3. R Programming (R Package)
사원 정보(EMP) 테이블을 arrange() 함수를 사용하여 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순(‘desc’)으로 정렬하여 출력한다.
- 날짜 형식은 Descending을 지정하기 위하여 “-“ 가 지원 안 함.
R Programming |
%%R
arrange ( emp, deptno, desc(hiredate) )
Results |
# A tibble: 14 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
2 7839 KING PRESIDENT NA 1981-11-17 5000 NA 10
3 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
4 7876 ADAMS CLERK 7788 1983-01-12 1100 NA 20
5 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
6 7902 FORD ANALYST 7566 1981-12-03 3000 NA 20
7 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20
8 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
9 7900 JAMES CLERK 7698 1981-12-03 950 NA 30
10 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
11 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30
12 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
13 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30
14 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
사원 정보(EMP) 테이블을 order() 함수를 사용하여 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순(‘-(xtfrm())’)으로 정렬하여 출력한다.
- xtfrm 함수는 문자 및 요인의 벡터에 대해 알파벳 순서로 숫자형 벡터를 생성한다.
- [참고] xtfrm : https://stackoverflow.com/questions/22725308/sort-data-frame-by-character-and-date-columns
R Programming |
%%R
emp[ order(emp$deptno, -(xtfrm( emp$hiredate ))), ] %>% head()
Results |
# A tibble: 6 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
2 7839 KING PRESIDENT NA 1981-11-17 5000 NA 10
3 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
4 7876 ADAMS CLERK 7788 1983-01-12 1100 NA 20
5 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
6 7902 FORD ANALYST 7566 1981-12-03 3000 NA 20
사원 정보(EMP) 테이블을 order() 함수를 사용하여 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순(‘-(xtfrm())’)으로 정렬하여 출력한다.
R Programming |
%%R
emp[ with(emp, order(deptno, -xtfrm(hiredate))) , ] %>% head()
Results |
# A tibble: 6 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
2 7839 KING PRESIDENT NA 1981-11-17 5000 NA 10
3 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
4 7876 ADAMS CLERK 7788 1983-01-12 1100 NA 20
5 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
6 7902 FORD ANALYST 7566 1981-12-03 3000 NA 20
사원 정보(EMP) 테이블을 order() 함수를 사용하여 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순(‘-(xtfrm())’)으로 정렬하여 출력한다.
R Programming |
%%R
emp[ order(emp$deptno, -(as.numeric( emp$hiredate ))), ] %>% head()
Results |
# A tibble: 6 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
2 7839 KING PRESIDENT NA 1981-11-17 5000 NA 10
3 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
4 7876 ADAMS CLERK 7788 1983-01-12 1100 NA 20
5 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
6 7902 FORD ANALYST 7566 1981-12-03 3000 NA 20
4. R Dplyr Package
사원 정보(EMP) 테이블을 arrange() 함수를 사용하여 1차적으로 부서번호(‘deptno’)를 기준으로 오름차순 정렬하고, 2차로 입사일자(‘hiredate’)를 기준으로 내림차순(‘-(xtfrm())’)으로 정렬하여 출력한다.
R Programming |
%%R
emp %>%
dplyr::arrange(deptno, desc(hiredate)) %>%
head()
Results |
# A tibble: 6 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
2 7839 KING PRESIDENT NA 1981-11-17 5000 NA 10
3 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
4 7876 ADAMS CLERK 7788 1983-01-12 1100 NA 20
5 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
6 7902 FORD ANALYST 7566 1981-12-03 3000 NA 20
5. R sqldf Package
사원 정보(EMP) 테이블을 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순으로 정렬하여 출력한다.
R Programming |
%%R
sqldf(" select *
from emp
order
by deptno,hiredate desc;") %>% head
Results |
empno ename job mgr hiredate sal comm deptno
1 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
2 7839 KING PRESIDENT NA 1981-11-17 5000 NA 10
3 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
4 7876 ADAMS CLERK 7788 1983-01-12 1100 NA 20
5 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
6 7902 FORD ANALYST 7566 1981-12-03 3000 NA 20
6. Python pandasql Package
사원 정보(EMP) 테이블을 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순으로 정렬하여 출력한다.
Python Programming |
ps.sqldf(" select * from emp \
order by deptno,hiredate desc; ").head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
0 | 7934 | MILLER | CLERK | 7782.0 | 1982/01/23 | 1300 | NaN | 10 |
1 | 7839 | KING | PRESIDENT | NaN | 1981/11/17 | 5000 | NaN | 10 |
2 | 7782 | CLARK | MANAGER | 7839.0 | 1981/01/09 | 2450 | NaN | 10 |
3 | 7876 | ADAMS | CLERK | 7788.0 | 1983/01/12 | 1100 | NaN | 20 |
4 | 7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | NaN | 20 |
7. R data.table Package
사원 정보(DT) 테이블을 setorder() 함수를 사용하여 1차적으로 부서번호(‘deptno’)를 기준으로 오름차순 정렬하고, 2차로 입사일자(‘hiredate’)를 기준으로 내림차순(‘-‘)으로 정렬하여 출력한다.
R Programming |
%%R
DT <- data.table(emp)
data.table::setorder(DT,deptno,-hiredate)
DT[1:5, ]
Results |
empno ename job mgr hiredate sal comm deptno
1: 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
2: 7839 KING PRESIDENT NA 1981-11-17 5000 NA 10
3: 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
4: 7876 ADAMS CLERK 7788 1983-01-12 1100 NA 20
5: 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
사원 정보(DT) 테이블을 order() 함수를 사용하여 1차적으로 부서번호(‘deptno’)를 기준으로 오름차순 정렬하고, 2차로 입사일자(‘hiredate’)를 기준으로 내림차순(‘-‘)으로 정렬하여 출력한다.
R Programming |
%%R
DT <- data.table(emp)
# DT[order(deptno, -as.character(hiredate)),]
DT[ order(deptno, -hiredate) , ][1:5, ]
Results |
empno ename job mgr hiredate sal comm deptno
1: 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
2: 7839 KING PRESIDENT NA 1981-11-17 5000 NA 10
3: 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
4: 7876 ADAMS CLERK 7788 1983-01-12 1100 NA 20
5: 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
8. SAS Proc SQL
사원 정보(EMP) 테이블을 1차적으로 부서번호를 기준으로 오름차순 정렬하고, 2차로 입사일자를 기준으로 내림차순으로 정렬하여 출력한다.
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
select *
from emp
order
by deptno,hiredate desc;
QUIT;
PROC PRINT data=STATSAS_1(obs=3);RUN;
Results |
OBS | empno | ename | job | mgr | hiredate | sal | comm | deptno |
1 | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300 | . | 10 |
2 | 7839 | KING | PRESIDEN | . | 1981-11-17 | 5000 | . | 10 |
3 | 7782 | CLARK | MANAGER | 7839 | 1981-01-09 | 2450 | . | 10 |
9. SAS Data Step
SAS Programming |
%%SAS sas
PROC SORT DATA=EMP OUT=EMP_1;
BY deptno DESCENDING hiredate;
RUN;
PROC PRINT data=EMP_1(obs=3);RUN;
Results |
OBS | empno | ename | job | mgr | hiredate | sal | comm | deptno |
1 | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300 | . | 10 |
2 | 7839 | KING | PRESIDEN | . | 1981-11-17 | 5000 | . | 10 |
3 | 7782 | CLARK | MANAGER | 7839 | 1981-01-09 | 2450 | . | 10 |
10. Python Dfply Package
Python Programming |
emp >> \
arrange(X.deptno, desc(X.hiredate) ) >> \
head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
13 | 7934 | MILLER | CLERK | 7782.0 | 1982/01/23 | 1300 | NaN | 10 |
8 | 7839 | KING | PRESIDENT | NaN | 1981/11/17 | 5000 | NaN | 10 |
6 | 7782 | CLARK | MANAGER | 7839.0 | 1981/01/09 | 2450 | NaN | 10 |
10 | 7876 | ADAMS | CLERK | 7788.0 | 1983/01/12 | 1100 | NaN | 20 |
7 | 7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | NaN | 20 |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트
댓글