SQL 코딩테스트 복기 -시간 데이터 다루기, 조건에 맞는 값 추출-

1. datetime에서 일부 시간만 가져오기

 

datetime 데이터에서 시간만 필요한 경우가 있었다..

 

hour(), minute(), second() 써봤는데 진짜로 되네??

 

[MySQL] 날짜 데이터에서 일부만 추출하기 :: 확장형 뇌 저장소 (tistory.com)

 

[MySQL] 날짜 데이터에서 일부만 추출하기

▶MySQL 날짜 데이터에서 일부만 추출하기 ▶설명 아래에 MySQL 함수들은 날짜 데이터에서 일부만을 추출할 수있습니다. YEAR : 연도 추출 MONTH : 월 추출 DAY : 일 추출 (DAYOFMONTH와 같은 함수) HOUR : 시

extbrain.tistory.com

 

 

DATE_FORMAT() 함수로 시간만 뽑아낼 수 있을듯

 

DATE_FORMAT(DATETIME, '%H:%i:%S') 이런식으로?

 

혹은 DATEDIFF나 TIMESTAMPDIFF로 시간차이도 구한다는데

 

[MySQL] DATETIME 가공하기 (tistory.com)

 

[MySQL] DATETIME 가공하기

* 날짜 데이터에서 일부만을 추출하기 YEAR : 연도 MONTH : 월 DAY : 일 (DAYOFMONTH와 같은 함수) HOUR : 시 MINUTE : 분 SECOND : 초 SELECT HOUR(DATETIME) AS HOUR FROM DATETABLE * 원하는 포맷으로 바꾸기 DATE_FORMAT SELECT DAT

selgii.tistory.com

 

 

2. 조건에 맞는 값 추출하기

 

만약 테이블이 다음과 같다고 해보자

 

id a b c
1 2 3 0
2 4 5 1
3 6 2 2

 

새로운 변수 d = a/b로 정의하는데, 만약 c가 0인 행의 d값보다 작은 행을 추출하라고 하면 어떻게 해야할까

 

select id, a/b, c from table 

where c = 0;

 

으로 c가 0인 행을 추출하자

 

이렇게 만든 테이블과 원래 테이블을 innerjoin해서 c=0인 행의 a/b값을 새로운 변수로 추가시킨다

 

select * from table A, (select a/b from table where c= 0) B;

 

이렇게 하면

 

id a b c a/b
1 2 3 0 0.666
2 4 5 1 0.666
3 6 2 2 0.666

 

 

이러면, a/b라는 변수가 있으니까...

 

select id, a/b from table A, (select a/b as d from table where c=0) B

where a/b < d;

 

이런 느낌으로 하면 c=0인 행의 a/b보다 작은 a/b를 가진 행들을 추출할 수 있을거

 

결국 중요한게 적절한 행을 추출한 table을 이용한 subquery를 잘 쓰는게 확실히 중요하긴 해

TAGS.

Comments