✍ Today I Learned
- 날짜 함수 관련해서는 정답이 없다. 어떤 포맷팅으로 기록하고, 무엇을 기록할 것이냐에 따라 달라진다.
- 모든 걸 DB에서 처리할 수 없고, 오히려 속도는 프로그래밍에서 하는 게 빠르지만 문제는 트래픽 양이다. 트래픽 양 = 호스팅 비용 = 돈 이기 때문에..
- MySQL의
IFNULL()
함수는 Oracle의 NVL()
함수와 동일하게 작동한다. (nvl = null value)
ADDDATE()
vs DATE_ADD()
차이점은? ADDDATE()
는 두 번째 인수로 INTERVAL value addunit 대신 추가할 일수만 지정하는 days를 사용할 수 있다! 즉 ADDDATE(date, 3)
이런 식으로 사용 가능하다. 참고자료
- CASE문 뒤쪽으로 비교할 value를 넣고 WHEN 절에서 null 값을 체크하려 했는데 전혀 null 값 체크를 못하네? null은 연산이 되지 않기 때문이라고 짐작해본다. 구글링을 통해
COALESCE()
, IFNULL()
를 이용한 방법을 찾고 null 값 체크를 해주었다. 참고자료
-- coalesce 이용한 방법(null이 아닌 첫번째 값을 반환)
select empno, ename, mgr,
case coalesce(substr(mgr, 1, 2), 0)
when 0 then '0000'
when '75' then '5555'
when '76' then '6666'
when '77' then '7777'
when '78' then '8888'
else mgr
end as CHG_MGR
from emp;
-- ifnull 이용한 방법(null이면 지정된 값을 반환)
select empno, ename, mgr,
case ifnull(substr(mgr, 1, 2), 0)
when 0 then '0000'
when '75' then '5555'
when '76' then '6666'
when '77' then '7777'
when '78' then '8888'
else mgr
end as CHG_MGR
from emp;
GROUP BY
- 특정 데이터로 묶는다. 주로 집계 함수와 함께 사용한다. 그룹으로 묶은 후 그룹과 매칭 되는 로우가 필요하다.
HAVING
- 묶은 데이터에 조건을 부여한다.
COUNT()
함수는 주로 PRIMARY KEY에 사용한다.
WITH ROLLUP
- GROUP BY
에서 선택한 기준에 따라 소계, 총계를 계산한다.
GROUPING(col_name)
- 소계, 총계 데이터인 경우에는 1을 반환하고, 그렇지 않으면 0을 반환한다.
- 항상 데이터베이스가 실행되는 순서대로 생각하자.