- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 배포
- 오늘도 개발자가 안된다고 말했다
- react
- 알고리즘
- 에러핸들링
- java
- 코딩테스트
- Git
- 코어 자바스크립트
- mongodb
- 프로그래머스
- First Project
- sql
- Docker
- TMIL
- Err-Handling
- LEVEL1
- typescript
- TWIL
- 면접을 위한 cs 전공지식 노트
- TIL
- 리팩터링 2판
- CRUD
- javascript
- MariaDB
- 아고라스테이츠
- CSS
- Refactoring
- LEVEL 1
- LEVEL 2
성장에 목마른 코린이
[DB] SQL 내장함수 본문
GROUP BY
데이터를 조회할 때 그룹으로 묶어서 조회합니다.
SELECT * FROM customers;
이 쿼리를 주(state)에 따라 그룹으로 묶어 표현할 수 있습니다.
SELECT * FROM customers
GROUP BY State;
GROUP BY 쿼리로 간단하게 State에 따라 그룹화할 수 있습니다.
쿼리의 결과를 확인하면, 데이터가 중간에 비어있는 것을 확인할 수 있습니다.
데이터베이스에서 데이터를 불러오는 과정에서 State에 따라 그룹을 지정했지만, 그룹에 대한 작업 없이 조회만 했습니다.
그래서 쿼리의 결과로 나타나는 데이터는 각 그룹의 첫 번째 데이터만 표현됩니다.
HAVING
HAVING은 GROUP BY 로 조회된 결과를 필터링할 수 있습니다.
SELECT CustomerId, AVG(Total)
FROM invoices
GROUP BY CustomerId
HAVING AVG(Total) > 6.00
이 쿼리는 모든 고객의 주문서에서 가격의 평균을 구한 뒤에, 그 평균이 6.00을 넘는 결과만 조회합니다.
이렇게 GROUP BY로 그룹을 지은 결과에 필터를 적용할 때에는 HAVING을 사용할 수 있습니다.
HAVING은 그룹화한 결과에 대한 필터이고, WHERE는 저장된 레코드를 필터링합니다.
COUNT()
COUNT 함수는 레코드의 개수를 셀 때 사용합니다.
SELECT *, COUNT(*) FROM customers
GROUP BY State;
위 커맨드를 실제로 실행하면, 각 그룹의 첫 번째 레코드와 각 그룹의 레코드 개수를 집계하여 리턴합니다. 다음과 같이 변경하면, 그룹으로 묶인 결과의 레코드 개수를 확인할 수 있습니다.
SELECT State, COUNT(*) FROM customers
GROUP BY State;
SUM()
SUM 함수는 레코드의 합을 리턴합니다. SUM 함수의 사용법은 다음과 같습니다.
SELECT InvoiceId, SUM(UnitPrice)
FROM invoice_items
GROUP BY InvoiceId;
위 커맨드는 invoice_items라는 테이블에서 InvoiceId 필드를 기준으로 그룹하고, UnitPrice 필드 값의 합을 구합니다.
AVG()
AVG 함수는 레코드의 평균값을 계산하는 함수입니다. AVG 함수의 사용법은 다음과 같습니다.
SELECT TrackId, AVG(UnitPrice)
FROM invoice_items
GROUP BY TrackId;
MAX(), MIN()
MAX 함수와 MIN 함수는 각각 레코드의 최댓값과 최솟값을 리턴합니다.
SELECT CustomerId, MIN(Total)
FROM invoices
GROUP BY CustomerId
각 고객이 지불한 최소 금액을 리턴합니다. MIN 대신 MAX를 쓰면 최대 금액을 리턴합니다.
'데이터베이스' 카테고리의 다른 글
[DB] ADVANCED (서브쿼리, SQL 종류, DB 정규화) (0) | 2022.04.11 |
---|---|
[DB] 생성, 기본 문법 (CREATE, SHOW, DESC, DROP, ALTER) (0) | 2022.04.09 |
[DB] 헷갈리는 DB 조작 (INSERT, UPDATE, JOIN) (0) | 2022.04.09 |
[DB] DB 조작 (SELECT, WHERE, LIKE, IN, ORDER BY) (0) | 2022.04.09 |
[DB] SQL(구조화 쿼리 언어) vs. NoSQL(비구조화 쿼리 언어) (0) | 2022.04.07 |