문제풀기/테이블 조작 관련 문제

[날짜함수] employees 테이블에서 짝수달에 입사한 사원의 employee_id, last_name, hire_date, 입사월 정보를 출력하세요. 추가적으로, 입사월을 기준으로 정렬하세요.

5시간코딩 2019. 4. 5. 15:55

1. oracle

explain plan for 
select employee_id, last_name,hire_date, to_number(to_char(hire_date,'mm')) as "hire_month"
from employees
where mod(to_number(to_char(hire_date,'mm')),2)=0
order by 4;
select * from table(dbms_xplan.display(null,null,'typical'));

--------------------------------------------------------------------------------
| Id  | Operation          | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |           |     1 |    20 |     4  (25)| 00:00:01 |
|   1 |  SORT ORDER BY     |           |     1 |    20 |     4  (25)| 00:00:01 |
|*  2 |   TABLE ACCESS FULL| EMPLOYEES |     1 |    20 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - filter(MOD(TO_NUMBER(TO_CHAR(INTERNAL_FUNCTION("HIRE_DATE"),'mm')
              ),2)=0)

 

 

2. r

1) 문자->날짜->문자(월)->숫자

emp <- read.csv("c:/data/employees.csv",header=T,stringsAsFactors = F)
emp_new <-subset(emp,,select=c(EMPLOYEE_ID, LAST_NAME, HIRE_DATE))
emp_new$month <-as.numeric(format(as.Date(emp_new$HIRE_DATE,'%Y-%m-%d'),'%m'))
res=emp_new[emp_new$month%%2==0,]
library(doBy)
orderBy(~month,res) #혹은 res[order(res$month),]

2)

library(dplyr)
emp%>%
  select(EMPLOYEE_ID,LAST_NAME,HIRE_DATE)%>%
  mutate(MONTH = as.numeric(format(as.Date(HIRE_DATE,format=('%Y-%m-%d')),'%m')))%>%
  filter(MONTH%%2==0)%>%
  arrange(desc(MONTH))

 

 

 

3. python

1)

import csv

생략

 

2) pandas.to_datetime 이용

import pandas as pd
from datetime import datetime

emp=pd.read_csv("c:/data/employees.csv")
emp['MONTH']=pd.to_datetime(emp['HIRE_DATE']).apply(lambda x:x.month)
res = emp.loc[emp['MONTH']%2==0,['EMPLOYEE_ID','LAST_NAME','HIRE_DATE','MONTH']]
res.sort_values(by='MONTH',ascending=True)

 

3) datetime.datetime.strptime() 이용

생략

 

4) 인덱싱 이용

import dandas as pd
df=pd.read_csv("c:/data/employees.csv")


df['MONTH']=[int(i[5:7]) for i in df['HIRE_DATE']]
df['bool']=[int(i[5:7])%2==0 for i in df['HIRE_DATE']]

res=df.loc[df['bool'],['EMPLOYEE_ID','LAST_NAME','HIRE_DATE','MONTH']]
res.sort_values(by='MONTH',ascending=False)