[SQL] 프로그래머스 스터디 GROUP BY(집계함수), 날짜 및 시간 관련함수

Stella·2023년 7월 24일

* MYSQL 프로그램 기준으로 작성하였다.

1. GROUP BY

GROUP BY절은 집계함수와 같이 사용된다.

- 집계함수 (Aggregation function)

COUNT 건수(행의 개수)
SUM 합계
AVG 평균
MAX 최댓값
MIN 최솟값
STDDEV 표준편차
VARIANCE 분산

GROUP BY절의 컬럼은 SELECT절에 있어야 하며, 컬럼 별로 집계함수를 구하고 싶을 때 GROUP BY절에서 사용하면 된다.

SELECT NAME, COUNT(*) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT >= 2 AND NAME IS NOT NULL
ORDER BY NAME

HAVING절에 NAME에 대해 필요한 집계함수 조건을 입력하면 된다.

SELECT ANIMAL_TYPE, COUNT(*) AS count
FROM ANIMAL_INS 
GROUP BY ANIMAL_TYPE
HAVING COUNT(DISTINCT ANIMAL_TYPE)
각각 몇 마리인지 조회 -> 중복값을 없애야 한다.

2. 날짜 및 시간 관련함수

  • DATE_FORMAT(컬럼, '%Y-%m-%d')
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d')AS HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD = 'CS' OR MCDP_CD = 'GS'
ORDER BY HIRE_YMD DESC, DR_NAME ASC

DATE_FORMAT에서 '%Y-%m-%d' 대소문자를 구분해서 작성해야 한다. m, d를 대문자로 사용할 경우 영어로 날짜가 출력된다.

  • DAYOFYEAR(date) 주어진 date의 일자가 해당 연도에서 몇 번째 날인지 반환하는 것(1~366)

- 특정 날짜와 시간 정보

  • DATE('2023-07-25')
    2023-07-25 출력된다.

  • MONTH('2023-07-25')
    7이 출력된다.

  • DAY('2023-07-25')
    25가 출력된다.

  • WEEKDAY('2023-07-25')
    주어진 날짜에서 요일에 해당하는 숫자가 출력된다.
    월요일=0, 일요일=6이 출력된다.

  • LAST_DAY('2023-07-25')
    주어진 날짜에서 해당 월의 마지막 날짜 정보가 출력된다.

  • HOUR('2023-07-25 07:41:25')
    7이 출력된다.

  • MINUTE('2023-07-25 07:41:25')
    41이 출력된다.

  • SECOND('2023-07-25 07:41:25')
    25가 출력된다.

- 현재 날짜와 시간 정보

  • NOW(), CURRENT_TIMESTAMP()
    현재 날짜와 시간이 출력된다.
  • CURDATE(), CURRENT_DATE()
    현재 날짜 출력
  • CURTIME(), CURRENT_TIME()
    현재 시각 출력

- 특정 날짜와 시간 연산

  • SELECT ADDDATE('2023-07-25', INTERVAL 5 DAY)
    DATE에 날짜를 추가한 DATE값이 출력된다.

  • SELECT ADDTIME('2023-07-25 07:52:40', '10 08:05');
    DATETIME에 10 08:05만큼 시간을 추가된 값이 출력된다.

  • SELECT SUBDATE('2023-07-25', INTERVAL 5 DAY)
    DATE에 날짜를 뺀 DATE값이 출력된다.

  • SELECT SUBTIME('2023-07-25 07:52:40', '10 08:05');
    DATETIME에 10:08:05만큼 시간을 뺀 값이 출력된다.

- 특정 날짜나 시간의 차이 연산

  • SELECT PERIOD_DIFF(202307, 202302)
    두 기간의 차이를 숫자로 반환한다. 5가 출력된다.

  • SELECT DATEDIFF(CURDATE(), '2022-07-25');
    두 날짜 사이의 일수를 숫자로 출력한다. 365가 출력된다.

  • SELECT TIMEDIFF('2023-07-25 07:51:40', '2023-07-20 07:51:40');
    두 시간의 차이를 DATETIME형태로 출력된다.

profile
공부 기록

0개의 댓글