1 분 소요

SQL 내장함수

GROUP BY

데이터를 조회할 때 그룹으로 묶어서 조회한다.

-- customers의 모든 레코드르 State에 따라 그룹화
SELECT * FROM customers
GROUP BY State

HAVING

GROUP BY로 조회된 결과에 조건을 설정 할 떄 사용한다.

-- invoices 테이블을 CustomerId로 그룹화하고 그 평균이 6을 초과한 결과를 조회
SELECT CustomerId, AVG(Total)
FROM invoices
GROUP BY CustomerId
HAVING AVG(Total) > 6.00

COUNT()

레코드의 갯수를 구하는 함수

-- 각 State 에 해당하는 레코드의 개수를 확인
SELECT State, COUNT(*) FROM customers
GROUP BY State;

SUM()

레코드의 합을 구하는 함수

-- invoice_items라는 테이블에서 InvoiceId 필드를 기준으로 그룹하고, UnitPrice 필드 값의 합을 구함
SELECT InvoiceId, SUM(UnitPrice)
FROM invoice_items
GROUP BY InvoiceId

AVG()

레코드의 평균값을 구하는 함수

SELECT TrackId, AVG(UnitPrice)
FROM invoice_items
GROUP BY TrackId;

MAX(), MIN()

레코드의 최대값, 최소값을 구하는 함수

-- 각 고객이 지불한 최소 금액
SELECT CustomerId, MIN(Total)
FROM invoices
GROUP BY CustomerId

SELECT 문의 실행 순서

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY
SELECT CustomerId, AVG(Total)
FROM invoices
WHERE CustomerId >= 10
GROUP BY CustomerId
HAVING SUM(Total) >= 30
ORDER BY 2

위 쿼리문의 실행 순서는 다음과 같다.

  1. FROM invoices: invoices 테이블에 접근을 합니다.
  2. WHERE CustomerId >= 10: CustomerId 필드가 10 이상인 레코드들을 조회합니다.
  3. GROUP BY CustomerId: CustomerId를 기준으로 그룹화합니다.
  4. HAVING SUM(Total) >= 30: Total 필드의 총합이 30 이상인 결과들만 필터링합니다.
  5. SELECT CustomerId, AVG(Total): 조회된 결과에서 CustomerId 필드와 Total 필드의 평균값을 구합니다.
  6. ORDER BY 2: AVG(Total) 필드를 기준으로 오름차순 정렬한 결과를 리턴합니다.