
2021년 8월 26일에 작성된 문서 6번 입니다.
데이터 베이스 배운 내용을 정리했습니다.
SELECT * FROM customers;
//customers 테이블의 모든 레코드를 조회
SELECT * FROM customers
GROUP BY State;
//customers 테이블의 모든 레코드를 State에 따라 그룹화
GROUP BY로 State에 따라 그룹화할 수 있다. 쿼리의 결과를 확인하면, 데이터가 중간에 비어있는 것을 확인할 수 있습니다. 데이터베이스에서 데이터를 불러오는 과정에서 State에 따라 그룹을 지정했지만, 그룹 대한 작업없이 조회만 했습니다. 그래서 쿼리의 결과로 나타나는 데이터는 각 그룹의 첫번째 데이터만 표현됩니다.
SELECT CustomerId, AVG(Total)
FROM invoices
GROUP BY CustomerId
HAVING AVG(Total) > 6.00
// invoices 테이블을
// CustomerId로 그룹화하고
// 그 평균이 6을 초과한 결과를 조회
GROUP BY로 그룹을 지은 결과에 필터를 적용할 때에는 HAVING을 사용SELECT *, COUNT(*) FROM customers
GROUP BY State;
//모든 레코드에 대한 COUNT 함수 사용
SELECT State, COUNT(*) FROM customers
GROUP BY State;
//각 State에 해당하는 레코드의 갯수를 확인
SELECT InvoiceId, SUM(UnitPrice)
FROM invoice_items
GROUP BY InvoiceId;
//SUM 함수 사용
위 커맨드는 invoice_items라는 테이블에서 InvoiceId 필드를 기준으로 그룹하고, UnitPrice 필드 값의 합을 구합니다.
SELECT TrackId, AVG(UnitPrice)
FROM invoice_items
GROUP BY TrackId;
//AVG 함수 사용
SELECT CustomerId, MIN(Total)
FROM invoices
GROUP BY CustomerId
//MIN 함수 사용
위 커맨드에서 MIN을 MAX로 변경하면, 각 고객이 지불한 최대 금액을 리턴.
SELECT CustomerId, AVG(Total)
FROM invoices
WHERE CustomerId >= 10
GROUP BY CustomerId
HAVING SUM(Total) >= 30
ORDER BY 2
//SELCT 문의 실행 순서
| 순서 | 쿼리문 | 설명 |
|---|---|---|
| 1 | FROM invoices | invoices 테이블에 접근. |
| 2 | WHERE CustomerId >= 10 | CustomerId필드 10이상인 레코드 조회 |
| 3 | GROUP BY CustomerId | CustomerId를 기준으로 그룹화 |
| 4 | HAVING SUM(Total) >= 30 | Total필드 총합 30이상인 결과만 필터 |
| 5 | SELECT CustomerId, AVG(Total) | 조회 결과에서 CustomerId 필드와 Total필드 평균값을 구한다. |
| 6 | ORDER BY 2 | AVG(Total)필드 기준으로 오름차순 정렬한 결과 리턴 |
Written with StackEdit.