-
6.3 Aggregate functions데이터베이스 시스템 2024. 10. 23. 06:37
Aggregate functions
집계 함수는 여러 행에서 값을 처리하여 요약된 값을 반환한다. 일반적인 집계 함수는 다음과 같다:
- COUNT()는 집합에서 행의 개수를 센다
- MIN()는 최소값을 찾는다
- MAX()는 최대값을 찾는다
- SUM()은 집합의 모든 값을 더한다
- AVG()는 집합의 모든 값의 산술 평균을 계산한다.
집계 함수는 SELECT 절에 나타나며, WHERE 절 조건을 만족하는 모든 행을 처리한다. 만약 SELECT 문에 WHERE 절이 없으면, 집계 함수는 모든 행을 처리한다.
예제)
1) 2014
▼View solution
더보기SELECT MIN(Year) FROM Auto;
2) 92300
▼View solution
더보기SELECT SUM(Price) FROM Auto;
3) 2
▼View solution
더보기SELECT COUNT(*) FROM Auto WHERE Price < 10000;
GROUP BY절
집계 함수는 일반적으로 GROUP BY절과 함께 사용된다
GROUP BY 절은 GROUP BY 키워드와 하나 이상의 열로 구성된다. 각 열 또는 열들의 단순 값이나 복합 값은 하나의 그룹이 된다. 쿼리는 각 그룹에 대해 집계 함수를 별도로 계산하고, 각 그룹에 대해 한 행을 반환한다.
GROUP BY 절은 WHERE 절(있을 경우)과 ORDER BY 절 사이에 위치한다.
일반적으로 SELECT 절에는 집계 함수와 GROUP BY 절에 나타나는 열들만 포함될 수 있다. 그러나 MySQL은 이 규칙에 대한 제한적인 예외를 지원한다. 자세한 내용은 MySQL Handling of GROUP BY를 참조.
예제)
1번
Ford 1 Honda 2 Toyota 3 Volkswagen 1
▼View solution
더보기SELECT Make, COUNT(*) FROM Auto GROUP BY Make ORDER BY Make;
2번
2014 8800 2015 16400 2016 12675
▼View solution
더보기SELECT Year, AVG(Price) FROM Auto GROUP BY Year ORDER BY Year;
3번
compact 8800 sedan 10200 suv 16900 crossover 17900
▼View solution
더보기SELECT Type, MAX(Price) FROM Auto GROUP BY Type ORDER BY MAX(Price);
4번
2014 compact 8800 2015 crossover 15900 2015 suv 16900 2016 sedan 10200 2016 crossover 17900
▼View solution
더보기SELECT Year, Type, MAX(Price) FROM Auto GROUP BY Year, Type ORDER BY Year, MAX(Price);
HAVING절
HAVING 절은 GROUP BY 절과 함께 사용되어 그룹화된 결과를 필터링하는 데 사용된다. 선택적으로 사용할 수 있는 HAVING 절은 GROUP BY 절 뒤에 위치하며, 선택적으로 사용할 수 있는 ORDER BY 절 앞에 위치한다.
SELECT CountryCode, SUM(Population) FROM City GROUP BY CountryCode HAVING SUM(Population) > 2300000;
SELECT CountryCode, District, COUNT(*) FROM City GROUP BY CountryCode, District HAVING COUNT(*) >= 2;
예제1) 6.3.6: Find most recent release year for each genre.
The given SQL creates a Song table and inserts some songs. The SELECT statement selects the genre and row count for each genre group.
Add a new column to the SELECT statement that uses MAX() to find the most recent release year for each genre. Then add a HAVING clause that selects only genre groups that have more than one row count.
Run your solution and verify country pop, R&B, and grunge genres, row counts, and most recent release years appear in the result table.
CREATE TABLE Song ( ID INT, Title VARCHAR(60), Artist VARCHAR(60), ReleaseYear INT, Genre VARCHAR(20), PRIMARY KEY (ID) ); INSERT INTO Song VALUES (100, 'Hey Jude', 'Beatles', 1968, 'pop rock'), (200, 'You Belong With Me', 'Taylor Swift', 2008, 'country pop'), (300, 'You\'re Still the One', 'Shania Twain', 1998, 'country pop'), (400, 'Need You Now', 'Lady Antebellum', 2011, 'country pop'), (500, 'You\'ve Lost That Lovin\' Feeling', 'The Righteous Brothers', 1964, 'R&B'), (600, 'That\'s The Way Love Goes', 'Janet Jackson', 1993, 'R&B'), (700, 'Smells Like Teen Spirit', 'Nirvana', 1991, 'grunge'), (800, 'Even Flow', 'Pearl Jam', 1992, 'grunge'), (900, 'Black Hole Sun', 'Soundgarden', 1994, 'grunge'); -- Modify the SELECT statement SELECT Genre, COUNT(*) FROM Song GROUP BY Genre;
▼View solution
더보기SELECT Genre, COUNT(*), MAX(ReleaseYear) FROM Song GROUP BY Genre HAVING COUNT(*) > 1;
예제2) Choose the SELECT statement that returns the given results from the Auto table below.
1)
Honda 2 Toyota 3
▼View solution
더보기SELECT Make, COUNT(Make) FROM Auto GROUP BY Make HAVING COUNT(Make) > 1;
2)
2015 crossover 15900 2015 suv 16900 2016 crossover 17900
▼View solution
더보기SELECT Year, Type, MAX(Price) FROM Auto GROUP BY Year, Type HAVING MAX(Price) > 15000 ORDER BY Year, MAX(Price);
집계 함수와 NULL값
집계 함수는 NULL값을 무시한다. Ex) SUM(Salary)는 NULL이 아닌 모든 급여를 더하고, NULL 급여가 있는 행은 무시함.
집계 함수와 산술 연산자는 NULL을 다루는 방식이 다르다. 산술 연산자는 피연산자 중 하나가 NULL일 경우 NULL을 반환한다. 이로 인해 NULL이 포함된 경우 집계 함수는 예상치 못한 결과를 생성할 수 있다.
[출처: zyBooks]
'데이터베이스 시스템' 카테고리의 다른 글
7.2 Equijoins, self-joins, and cross-joins (0) 2024.11.08 7.1 Join queries (0) 2024.11.07 6.2 Simple Functions (0) 2024.10.22 6.1 Special operators and clauses (0) 2024.10.22 1.4 Database design and programming (0) 2024.10.07