[ZB] SQL 04

SeriesWorld·2023년 12월 16일

ZB20-SQL

목록 보기
4/5
post-thumbnail

Aggregate Functions (집계함수)

  • COUNT: 촉 갯수를 계산해주는 함수
    SUM: 합계
    AVG: 평균
    MIN: 가장 작은 값
    MAX: 가장 큰 값
    FIRST: 첫 번째 결과값을 리턴
    LAST: 마지막 결과값을 리턴

COUNT

  • 갯수를 파악할 때 사용
  • DISTINCT와 함께 사용하면 중복 없는(UNIQUE) 데이터의 갯수를 파악할 수 있다.
SELECT COUNT(column)
FROM tablename
WHERE dondition;

SUM

  • 합계
SELECT SUM(column)
FROM tablename
WHERE dondition;

AVG

  • 평균
SELECT AVG(column)
FROM tablename
WHERE dondition;

MIN/MAX

  • 최소/최대
SELECT MIN(column)
FROM tablename
WHERE dondition;
SELECT MAX(column)
FROM tablename
WHERE dondition;

TMI

  • 동일값이 여러 개인 경우에도 단 한 개만 반환한다.

    TMI2

    • MIN과 다른 컬럼을 같이 써서 '강도 발생'이 가장 적은 경찰서는 어디일지 찾아보고 싶었다.
      SELECT에 MIN과 타 컬럼을 같이 썼더니, 엉뚱한 결과값이 나왔다.
      (위에 강도 발생이 가장 적은 경찰서는 중부라고 나오는데, 중부경찰서의 강도발생 건수는 3건이었다.

GROUP BY

  • 데이터를 그룹화하여 조회
SELECT column1, column2, ...
FROM tablename
WHERE condition
GROUP BY column1, column2, ...
ORDER BY column1, column2, ...;
  • 주로 집계함수와 같이 사용하여 그룹별로 집계된 값을 추출할 때 사용한다.

    GROUP BY, ORDER BY 뒤에는 컬럼 이름을 써도 되지만, SELECT에 사용한 순서대로 숫자만 써도 된다.

    SELECT police_station, AVG(case_number) 평균건수 FROM crime_status
    WHERE (crime_type LIKE '폭력' OR crime_type LIKE '절도') AND status_type LIKE '발생'
    GROUP BY 1
    ORDER BY 2;

HAVING

  • 조건에 집계함수가 포함되는 경우 WHERE 대신 HAVING 사용
SELECT column1, column2, ...
FROM tablename
WHERE condition
GROUP BY column1, column2, ...
HAVING condition (Aggregate Functions)
ORDER BY column1, column2, ...;

Scalar Functions

  • 입력값을 기준으로 단일 값을 반환하는 함수
  • UCASE: 영문을 대문자로 변환
  • LCASE: 영문을 소문자로 변환
  • MID: 문자열의 부분을 반환
SELECT MID(string, start_position, length)
  • LENGTH: 문자열의 길이를 반환
  • ROUND: 반올림
SELECT ROUND(number, decimals_place)
  • NOW: 현재 날짜, 시간 표시

    TMI
    SELECT NOW()를 했을 때 현재 시간과 다르게 나올 수 있다.
    이는 mysql에서 time zone 세팅으로 인한 차이이다.

    • time zone 세팅값 확인
    select @@system_time_zone, @@global.time_zone, @@session.time_zone;
    • time zone 세팅
    SET time_zone='Asia/Seoul';

    TMI2
    system_time_zone은 가장 높은 단계의 설정값으로, OS에 설정된 시간대 정보를 가져와 설정한다.
    global.time_zone은 mysql 서버(인스턴스)에 설정된 설정값
    session.time_zone은 현재 임의로 설정된 설정값으로, 재접속시 (global_timezone)으로 초기화

    위 방법으로 time zone 설정시 session.time_zone이 변경된다.

  • FORMAT: 천 단위 콤마 형식으로 변환
    ROUND는 반환값이 숫자인 대신, FORMAT은 문자로 반환한다. (비교 불가능)

SELECT FORMAT(number, decimals_place) # decimals_place는 소수점 표시 위치. 숫자가 없으면 0으로 채워서 표시한다.

0개의 댓글