SQL-기본 문법 ②

09 Aug 2017 » sql

SQL 기본 문법 정리 ②

  • 이번 포스팅에서는 함수와 날짜 함수에 대해 알아보도록 하자.

3. 함수

3.1. 통계 관련 집계 함수

함 수 의 미
AVG 평균값
SUM 합계
COUNT 전체 레코드 수
COUNT(*) NULL 값을 포함한 전체 레코드 수
MIN 최소값
MAX 최대값
STDEV 표본 표준편차
STDEVP 모집단 표준편차
VAR 분산
VARP 모집단 분산
  • customer_info에서 테이블의 전체 레코드 수, 고객 나이의 평균과 합을 검색해라.
SELECT
    COUNT(*) AS count_all,
    AVG(year(GETDATE()) - year(BDAY)) AS aver_Age,
    SUM(year(GETDATE()) - year(BDAY)) AS sum_Age
FROM customer_info
;
  • customer_onlineinfo 테이블의 전체 레코드 수, email이 존재하는 레코드 수를 검색해라.
SELECT COUNT(*) AS count_all, COUNT(email) AS email_Y
FROM customer_onlineinfo
;

3.2. 날짜 함수

DATE_FORMAT(crt_date, ‘%Y-%m’)

  • 일자를 원하는 형식으로 변형
  • 시간대 별로 GROUP BY를 하고 싶은데, 시간이 있는 것이 아니라, 단위까지 남아있을 때
  • DATE_FORMAT()을 사용하여 시간으로 변경해주자.
SELECT
    DATE_FORMAT(max_crt_date, '%Y-%m-%d %H') AS hour_sales,
    SUM(
        CASE WHEN market_code = 'APPLE' THEN price*1000 ELSE price END
        ) AS sales,
    COUNT(DISTINCT(team_id)) AS PU
FROM Database.purchase_log
WHERE the_date >= '2016-09-01'
GROUP BY hour_sales
;

DATEADD(datepart, number, date)

  • datapart 자리에 숫자를 더한다.

DATEDIFF( datepart , startdate , enddate )

  • 두 날짜간의 차이를 나타낸다.
SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30')
;

# 결과 : 1

SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31')
;

# 결과 : -31 
datepart 약어
year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
hour hh
minute mi, n
second ss, s
millisecond ms
microsecond mcs
nanosecond ns

GETDATE()

  • 시스템의 날짜와 시각을 반환한다.

YEAR, MONTH, DAY(date)

  • 날짜에서 년, 월, 일을 반환한다.

3.2. IF 문, CASE 문, IFNULL 문

3.2.1. IF 문

SELECT member_id, IF (ISNULL(birthday), '-', birthday)
FROM member
;
  • member 테이블에서 아이디와 생일을 가져오는데,
  • 생일 = null일 경우는 -를 출력, 아니면 생일을 출력

3.2.2. CASE 문

SELECT CASE WHEN rank_id = '1' THEN 'a'
            WHEN rank_id = '2' THEN 'b'
            ELSE c
            END
FROM table_name
;
  • rank_id = 1 이면 a, rank_id = 2이면 b, 둘 다 아닐 경우 c를 출력
SELECT
    the_month,
    the_date,
    SUM(CASE WHEN store = 'IOS' THEN price*1000 ELSE price END) AS price
FROM purchase
GROUP BY the_month, the_date
  • CASE WHEN 문의 결과를 집계함수로 씌워주면 집계를 구할 수 있다.

3.2.3. IFNULL 문

SELECT IFNULL(price, 0)
FROM books
;
  • price 값이 NULL이면 0, 아니면 price 값을 출력

3.2.4. ISNULL 문

SELECT ISNULL(price, 0)
FROM books
;
  • price 값이 NULL이면 0, NULL이 아니면 price 값을 출력한다.