데이터를 분석하기 위해 통계(총합, 평균 등)를 내야한다면 어떤 방법을 쓸 수 있을까? SQL에서는 이러한 통계와 분석을 위해 집계 함수를 제공한다.
먼저 ALIAS는 테이블명이나 출력 칼럼명의 이름을 지정해 줄 수 있는데, AS 문법과 함께 사용하면 된다. 예시는 다음 쿼리에서 보자
최대 MAX() , 최소 MIN()
만약 롤에서 가장 비싸거나 싼 아이템을 찾고 싶다면 다음과 같이 작성하면 된다.
SELECT MAX(item_price) AS 제일비싼템 FROM items; // 최대
SELECT MIN(item_price) AS 제일싼템 FROM items; // 최소
이렇게 AS로 ALIAS를 정하면 출력 컬럼의 이름이 제일비싼템, 제일싼템으로 출력되게 된다.
평균 AVG()
모든 아이템의 가격의 평균을 내려면 다음과 같이 작성하면 된다.
SELECT AVG(item_price) AS 아이템평균가격 FROM items;
총합 SUM()
모든 아이템의 가격의 총합은 다음과 같다.
SELECT SUM(item_price) FROM items;
필터링 이후 통계도 내보자
WHERE문으로 먼저 필터링한 데이터에 대한 통계도 가능하다.
다음과 같은 요구조건이 있다고 가정하자. -> 물약 아이템의 가격 평균을 구해주세요 ~
쿼리는 다음과 같이 작성하면 되겠다.
SELECT AVG(item_price) FROM items WHERE item_type = 'potion';
이러면 물약인 아이템들의 평균을 구할 수 있게 된다.
데이터 중복 출력 제거 - DISTINCT
DISTINCT 키워드는 각 행에 있는 값들중에 유니크한 값만 골라서 필터링할 수 있다.
예를 들어 롤 챔이언들의 출신지가 어디 어디 있는지 종류만 보고 싶다면 다음과 같이 작성하면 된다.
SELECT DISTINCT origin FROM champions;
이렇게 작성하면 아무리 챔피언이 많아도, 하나의 유니크한 값들만 반환받아 확인할 수 있다.
그리고 참고로 DISTINCT로 중복을 제거한 데이터들을 대상으로도 집계함수를 사용할 수 있다.
출력 행 개수 제한 - LIMIT
ORDER BY 절에서 출력 데이터 개수를 지정하고 싶으면 다음과 같이 지정해면 된다.
전설에 가갈갱을 보고 싶다면 다음과 같이 적으면 된다.
SELECT * FROM champions ORDER BY champion_name ASC LIMIT 3;
챔피언 이름대로 정렬하고 , ㄱ-ㄴ-ㄷ 그중 상위 3개만 볼 수 있도록 설정하였다.
데이터가 너무 많으면 MAX() 이런것을 쓰는것보다 이처럼 ORDER BY로 오름차순 정렬 후 하나만 뽑아내는 것이 성능상 이점이 있을 수 있다.
'DataBase > SQL' 카테고리의 다른 글
| [SQL] 서브쿼리 쓰는 법 (0) | 2025.07.16 |
|---|---|
| [SQL] 결과 컬럼 사칙 연산 + 문자 함수 (0) | 2025.07.16 |
| [SQL] WHERE 을 더 맛있게 쓰는 방법 - LIKE (0) | 2025.07.16 |
| [SQL] 필터링이 필요할 땐 WHERE (0) | 2025.07.16 |
| [SQL] SQL Data type (0) | 2025.07.16 |