kyejin0412 님의 블로그
[TIL] Week 1-2 SQL 작성 및 실행순서 / 집계함수, WHERE, GROUP BY, ORDER BY, LIMIT 본문
[TIL] Week 1-2 SQL 작성 및 실행순서 / 집계함수, WHERE, GROUP BY, ORDER BY, LIMIT
kyejin0412 2025. 10. 22. 13:08
두번째 날이 밝았다.
어제는 종일 앉아있던 게 힘들었는지 곯아떨어졌다. 날씨가 마침 추워져서 겸사겸사 집콕하고 공부하게 되어 오히려 좋다!
오늘은 어제보다 더 알찼던 것 같다. 아직 루틴에 적응중이라 허리도 아프고 집중이 끊기기도 하지만, 점점 나아질 것 같다.
SQL 입문부터 탄탄하게 다져야겠다는 생각으로 차근차근 공부했다.
HAVING, WHERE, GROUP BY가 헷갈린다... 어떤건 행 필터링, 어떤건 컬럼 필터링 ㅜㅜ
언젠간 익숙해질 날이 오겠지...?ㅜㅡㅜ 내일은 강의를 듣고, 복습하고, 직무스터디를 할 예정이다.
더 집중해서 열정적으로 해보자!
[목차]
1. SQL 작성 순서와 실행 순서
2. 집계함수
3. GROUP BY
4. HAVING vs WHERE?
5. ORDER BY
6. LIMIT
내일 공부할 내용
1. SQL 작성 순서와 실행 순서
- SQL 작성 순서
- SELECT [컬럼명]
- FROM [테이블명]
- WHERE [조건식]
- GROUP BY [컬럼명]
- HAVING [조건식]
- ORDER BY [컬럼명]
- SQL 실행 순서
- FROM : 조회 테이블 확인
- ON
- JOIN
- WHERE : 데이터 추출 조건 확인 (행 필터링)
- GROUP BY : 지정한 컬럼을 기준으로 행 그룹화
- CUBE | ROLLUP
- HAVING : 그룹화된 데이터의 행 필터링
- SELECT : 원하는 데이터의 컬럼 추출
- DISTINCT : 중복 제거 구문. 중복을 제거할 컬럼 앞에 쓴다. COUNT()와 쓰면 중복을 제거한 값만 셀 수 있다.
- ORDER BY : 데이터 순서 정렬
- TOP
select cuisine_type,
sum(price) sum_of_price
from food_orders
where restaurant_name LIKE 'A%'
group by cuisine_type
order by 2

2. 집계함수
- COUNT() : 데이터를 세어주는 함수
- COUNT(*) = COUNT(1) : 전체 행의 개수를 세어줌, NULL 포함
- COUNT(DISTINCT 컬럼명) : 해당 컬럼의 수를 중복값 제거하여 세어줌
- COUNT(컬럼명) : NULL 제외한 해당 컬럼의 수
- SUM() : 숫자형 열의 데이터의 합계, NULL 제외하고 계산
- AVG() : 숫자형 열의 데이터의 평균, NULL 제외하고 계산
- VAR_SAMP() : 표본분산 구하는 함수
- VARIANCE() : 모분산 구하는 함수
- MIN() : 숫자나 문자형 열의 데이터의 최솟값 반환, NULL 제외
- MAX() : 숫자나 문자형 열의 데이터의 최댓값 반환, NULL 제외
- CEILING() : 소수점 이하를 무조건 올림. EX) SELECT CEILING(123.45) -> 124
- ROUND() : 두번째 인자=보여줄 소수점 자리. 즉, 두번째 인자+1번째 소수점 자리에서 반올림.
- EX) SELECT ROUND(123.456, 2) -> 123.46 (두번째 소수점 자리까지 보여주겠다는 뜻. 따라서 세번째 소수점 자리에서 반올림!!)
- FLOOR() : 소수점 이하를 무조건 내림. EX) SELECT FLOOR(123.45) -> 123
select min(quantity) as min_quantity,
max(quantity) as max_quantity,
count(DISTINCT quantity) as count
from food_orders
3. GROUP BY
같은 범주형 데이터값을 가진 행끼리 묶어주는 역할.
주로 집계함수와 함께 쓰이곤 함.
group by 절을 사용한다면, select 문에 언급된 모든 컬럼들은 집계함수가 되거나 group by 절에 언급되어야 함.
select pay_type,
max(date) as recent_date
from payments
group by pay_type -- 위에서 묶고싶은 범주형 컬럼을 모두 적어주면 됨.
-- : 주석처리
4. HAVING vs WHERE?
WHERE : 행들이 그룹지어지기 전 단일 행들을 필터링. 조건문은 YES or NO로 나올 수 있게!
-> GROUP BY (원하는 컬럼을 기준으로 그룹화)
-> HAVING : 행들이 그룹지어진 후의 행들을 필터링
5. ORDER BY
데이터를 정렬해주는 함수.
ORDER BY 칼럼명, 집계함수 ASC/DESC
ASC : 오름차순, 아무것도 적지 않으면 오름차순이 디폴트
DESC : 내림차순
정렬하고 싶은 기준을 여러 개 적을 경우, 첫번째 칼럼이나 집계로 먼저 정렬하고 뒤의 칼럼이나 집계로 정렬.
select cuisine_type,
sum(price) sum_of_price
from food_orders
group by cuisine_type
order by cuisine_type, sum(price)
-- order by 1,2 로 써도 같은 결과가 나옴. 1은 cuisine_type, 2는 sum(price)
6. LIMIT
- LIMIT [표시할 행 개수]
표시할 데이터의 행 개수 지정.
EX)
LIMIT 0부터 사용가능. -> 이 경우, 표시할 데이터는 없음.
LIMIT 1 : 1번째 행 표시
LIMIT 2 : 1,2번째 행 표시
LIMIT 10 : 1~10번째 행 표시
- LIMIT [시작 인덱스, 표시할 행 개수]
시작 인덱스 행부터 원하는 개수만큼 표시.
인덱스는 0부터 시작
EX)
LIMIT 0, 10 : 1~10번째 행
LIMIT 5, 5 : 6~10번째 행
- LIMIT [표시할 행 개수] OFFSET [시작인덱스]
OFFSET을 코드로 써주는 경우.
EX)
LIMIT 5 OFFSET 1 : 2번째 행부터 5개. 2~6번째 행
내일 공부할 내용 : JOIN
참고 링크
https://day-to-day.tistory.com/29
[MySQL] 결과 값 제한하기 - LIMIT 활용하기
포스팅 개요 SQL의 LIMIT 기본 문법을 정리하고, 리트코드 문제로 LIMIT 구문을 응용해 보기 위해서 포스팅을 작성한다. 기본 문법 LIMIT는 결과에서 몇 개의 행을 반환할 것인지 제한하는 구문이다.
day-to-day.tistory.com
4.1 집계 함수의 개념과 종류
### 4.1 집계 함수의 개념과 종류 집계 함수는 데이터베이스에서 그룹 단위로 데이터를 집계하고 통계적인 값을 계산하기 위해 사용되는 함수입니다. 집계 함수는 여러 개의 행…
wikidocs.net
https://sowhatmylifeismine.tistory.com/156
Solvesql 데이터 그룹으로 묶기 mysql 문제 풀이 (표본 분산)
Solvesql 데이터 그룹으로 묶기 - 평균, 표본 분산 등을 그룹핑하여 푸는 문제 헷갈릴 수 있는 포인트 - DBMS에 따라 표본 분산을 구하는 함수가 다를 수 있다 - VARIANCE() 를 취하면 표본 분산이 아닌
sowhatmylifeismine.tistory.com