# SQL 집계함수
COUNT, MAX, MIN, SUM, AVG
# group by
특정 컬럼을 기준으로 데이터를 요약해서 비교하고 싶을때 주로 사용한다
select 기준컬럼, 집계함수(조건컬럼을 기준으로 여러개의 집계함수 동시사용 가능)
from 테이블명
where 조건 #(생략가능)
group by 기준컬럼
# 사용방법
1) select 뒤 기준컬럼 작성
2) 집계함수 (count, max, min, avg, sum) 작성
3) where 절 뒤 group by 기준컬럼 작성
※ 여기서 만약 1), 2) 작성 후 3)번을 작성하지 않을 경우 에러가 발생한다
# 주의)) 기준컬럼과 집계함수를 작성하고 GROUP BY 절을 사용하지 않을 때 에러가 발생하는 예
select 기준컬럼, 집계함수(조건컬럼을 기준으로 여러개의 집계함수 동시사용 가능)
from 테이블명
where 조건 #(생략가능)
기준컬럼 -> n개의 값 반환
집계함수 -> 1개의 값 반환
서로 다르다
따라서 group by 절을 사용하여
기준컬럼 당 1개의 값을 반환할 수 있게 한다
( 서로 다른 n과 1을 맞춰준다 )
# SQL 작동순서
1) FROM
2) ON
3) JOIN
4) WHERE
5) GROUP BY
6) HAVING
7) SELECT
8) DISTINCT
9) ORDER BY
※ group by 숫자, order by 숫자
group by 1,2
order by 1,2 이런 식으로 쓸 수 있다
order by 1,2는 select보다 후순위이기 때문에 가능하지만
group by 1,2를 어떻게 사용할수 있는지 궁금할 수 있는데
원칙상으로는 불가능하다!
SQL 작동 순서상 23년 이전까지는 GROUP BY에 별칭(AS 값 ex) SELECT COUNT(price) as cnt의 cnt) 을 써 줄 수 없었으나 2023 신기능으로 GROUP BY에 별칭을 써 줄 수있게 바뀌었다고 한다
# 출처
http://www.koreaoug.org/c23_free/12430
# having과 where의 차이점
위에서 보는 것처럼
- where
group by 전 필터링
단일컬럼
- having
group by 후 필터링
집계함수

# 예제
1) 나이가 31세 이상이고 -> where 단일컬럼
2) 성별을 기준으로 평균 나이를 구하고 -> group by + select
3) 평균 나이가 41초과인 경우 -> having
# 집계함수, GROUP BY절, HAVING을 함께 사용하는 SQL문 - 실습
select 성별, avg(나이)as avg_age 2️⃣
from basic.theglory
where 나이>=311️⃣
group by 성별 2️⃣
having AVG_AGE>41 3️⃣

< 서브쿼리 >
# 사용이유
N 번의 쿼리문 실행을 1번의 쿼리문으로 실행하기 위해 쿼리의 결과값을 가지고 추가 연산을 하기 위해 사용됩니다.
# 종류
1. 일반 서브쿼리
where 절에서 사용한다
- 형식
where 컬럼 in (서브쿼리)
select *
from basic.theglory
where 나이 > (select 나이 from basic.theglory where 이름='문동은')
;

2. 스칼라 서브쿼리
select 절에서 사용
하나의 컬럼처럼 사용
select 이름
, 나이
, (select count(*) from theglory2 where theglory2.이름=theglory.이름) as same_name_cnt
, (select sum(결제금액) from theglory2 where theglory2.이름=theglory.이름)as same_name_sumamount
from basic.theglory
;

3. 인라인 뷰
from 절에서 사용
하나의 테이블처럼 사용
as 구문을 사용하여 별칭을 반드시 기재해야 한다!
select x.나이, x.직업
from( select *
from basic.theglory
where 나이>=33
)as x

※ 유의사항
select distinct game_id, sernerno (O)
select count(distinct game_id), serverno (O)
'Knowledge🦢 > SQL' 카테고리의 다른 글
| [SQL] group by를 쓸때 주의사항 (0) | 2024.04.27 |
|---|---|
| [SQL 3회차] union 과 join의 차이점 (0) | 2024.04.26 |
| [SQL] WHERE 1=1이 뭐야? 도대체 왜 쓰는 거야? (0) | 2024.04.23 |
| [SQL기초] 테이블 값 추가, 수정, 삭제 (0) | 2024.04.21 |
| [MySQL] 시간/날짜 관련 함수 알아보기 (1) | 2024.04.20 |