본문 바로가기

DataBase

집계함수, 집합함수, 그룹함수 - aggregate function (Maria DB)

MAX - 최대

SELECT MAX(컬럼명) FROM 테이블명;
SELECT MAX(Price) FROM products; -- 제일 큰 금액(Price) 출력
-- 가격이 최대인 상품명도 알고 싶어 SELECT에 ProductName 컬럼을 넣었다
-- ProductName이 제대로 매칭안됨
-- Côte de Blaye가 나와야하는데 맨 처음 레코드가 나옴
SELECT ProductName, MAX(Price) FROM products; 

-- 집계함수 사용해서 상품명이랑 제대로 매칭되서 보고 싶다면 서브쿼리 활용
SELECT * FROM products
WHERE Price = (SELECT MAX(Price) FROM products);

MIN - 최소

SELECT MIN(컬럼명) FROM 테이블명;
SELECT MIN(Price) FROM products; -- 제일 작은 금액(Price) 출력

COUNT - 갯수 

SELECT COUNT(컬럼명) FROM 테이블명;
SELECT COUNT(EmployeeID) FROM employees; -- 직원 수 조회

SUM - 합계

SELECT SUM(컬럼명) FROM 테이블명;
SELECT SUM(Price) FROM products; -- 상품 가격의 모든 합
-- 96년 07월 04일에 매출액 구하기
SELECT SUM(p.Price * od.Quantity) AS 매출액 
FROM products p JOIN orderdetails od
    ON p.ProductID = od.ProductID
JOIN orders o
    ON o.OrderID = od.OrderID
WHERE o.OrderDate = '1996-07-04';

AVG - 평균

SELECT AVG(컬럼명) FROM 테이블명;
SELECT AVG(Price) FROM products; -- 가격 평균 값

GROUP BY - 그룹함수 사용 시 그룹함수의 범위 지정

SELECT 컬럼명, 집계함수.. FROM 테이블명 GROUP BY 그룹으로 지정할 컬럼명;
-- 카테고리 ID 별로 금액이 제일 높은거 조회
SELECT CategoryID ,MAX(Price) FROM products GROUP BY CategoryID;

※ GROUP BY 함수 사용시 기존 집계 함수에서 서브쿼리 사용해 다른 컬럼이랑 같이 묶어서 봤던걸 조회할 수 있다.

    이유는 GROUP BY로 묶었기 때문에 서브쿼리 없이 SELECT문을 통해 조회 가능

HAVING - 그룹함수 연산결과를 조건으로 줄 수 있는 키워드

SELECT 컬럼명, 집계함수.. FROM 테이블명 GROUP BY 그룹으로 지정할 컬럼명 HAVING 그룹함수 조건;
-- 고객별 총 주문금액이 10만원이 넘는 고객들만 조회
SELECT c.CustomerName AS 고객명, SUM(p.Price * od.Quantity) `총 주문 금액`
FROM products p JOIN orderdetails od
                     ON p.ProductID = od.ProductID
                JOIN orders o
                     ON od.OrderID = o.OrderID
                JOIN customers c
                     ON o.CustomerID = c.CustomerID
GROUP BY c.CustomerID
HAVING `총 주문 금액` >= 100000; -- GROUP BY그룹함수의 HAVING으로 조건주기

 

총 예제)

-- 총 처리 금액 10만 달러 미만인 직원 조회
SELECT CONCAT(e.LastName, ' ', e.FirstName) AS 직원명, SUM(p.Price * od.Quantity) AS `총 처리 금액`
FROM products p JOIN orderdetails od
    ON p.ProductID = od.ProductID
JOIN orders o
    ON od.OrderID = o.OrderID
JOIN employees e
    ON o.EmployeeID = e.EmployeeID
GROUP BY e.EmployeeID
HAVING `총 처리 금액` < 100000;
반응형