ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.