📝 TIL

[TIL] MySQL 내장함수, GROUP BY, HAVING

오늘 ONEUL 2022. 6. 2. 20:58

✍ 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을 반환한다.
  • 항상 데이터베이스가 실행되는 순서대로 생각하자.