ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQL] SQL 기초 COUNT(), SUM(), MAX()/MIN(), AVG(), ROUND()
    SQL & Database 2021. 10. 27. 09:58

    SQL 이용한 계산

    • COUNT(): rows 수를 count
    • SUM(): column 합의 계산
    • MAX() / MIN(): 가장 /작은
    • AVG(): columns 평균
    • ROUND(): column 값을 반올림

     

    COUNT

    -테이블의 rows 가장 빠르게 계산 하는 방법은 COUNT

    -column 이름을 argument 받아서 non-empty 값을 가진 coulmn 개수를 구함

    SELEC COUNT(*)
    FROM table_name;

    -모든 rows count하기 위해 * 넣어줌

    -COUNT 중복된 값을 포함해서 count 하기 때문에 unique value 세기 위해서는 다음과 같이 DISTINCT 넣어주면 된다.

    SELECT COUNT(DISTINCT category)
    FROM fake_apps;

     

    SUM

    -column 값의 합을 반환해줌

    SELECT SUM(downloads)
    FROM apps;

    -count non-empty value 가진 rows들의 개수를 구하기 위한 것이고 sum 모든 값들의 합을 구하기 위한

     

    Max / Min

    -column에서 가장 값과 작은 값을 반환

    SELECT MAX(downloads)
    FROM apps;

    -가장 크고 작은 값이 여러 있으면 가장 위에 있는 rows 반환 된다.

     

    Average

    -column 이름을 매겨변수로 받아서 평균값을 반환한다.

    SELECT AVG(downloads)
    FROM apps;

    -unique value 합을 구하기 위해서는 DISTINCT 이용하면됨

    /* Returns 2.02365 */
    SELECT AVG(price)
    FROM apps;
    
    /* Returns 4.15833.. */
    SELECT AVG(DISTINCT price)
    FROM apps;

     

    ROUND

    -기본적으로 SQL 반올림 없이 가능한 정확하게 저장하려고 한다.

    -ROUND 이용해 읽기 쉽게 결과 table 만들 있다.

    -ROUND에는 2개의 arguments (column name, integer 소수점 자리) 들어 간다.

    SELECT ROUND(price, 0)
    FROM apps;

     

    Group BY 1

    SELECT AVG(imdb_rating)
    FROM movies
    WHERE year = 1999;
    
    SELECT AVG(imdb_rating)
    FROM movies
    WHERE year = 2000;
    
    SELECT AVG(imdb_rating)
    FROM movies
    WHERE year = 2001;

    -이렇게 다른 where 절을 통해서 여러 그룹의 숫자를 계산 때가 있다.

    SELECT year,
        AVG(imdb_rating)
    FROM movies
    GROUP BY year
    ORDER BY year;

    -GROUP BY SELECT 함께 쓰여서 그룹으로 동일한 데이터를 정렬함

    -GROUP BY WHERE 뒤에 나오면서 ORDER BY 또는 LIMIT 앞에 나온다.

    SELECT price, COUNT(*)
    FROM apps
    GROUP BY price;
    
    --RESULT--
    |price|COUNT(*)|
    ----------------
    |0.0  | 73     |
    |0.99 | 43     |
    |1.99 | 42     |
    |2.99 | 21     |
    |3.99 | 9      |
    SELECT CATEGORY, SUM(DOWNLOADS)
    FROM APPS GROUP BY CATEGORY;
    
    --Result--
    |category       |SUM(downloads)|
    -------------------------
    |Books          |160864        |
    |Business       |178726        |
    |Catalogs       |186158        |
    |Education      |184724        |
    |Entertainment  |342333        |
    |Finance        |423535        |
    |Food&Drink     |323232        |
    |Games          |163433        |
    |Health&Fitness |535323        |

     

    -SELECT 포함 안된 column으로 GROUP BY 해도 된다.

    SELECT name, downloads
    FROM apps
    GROUP BY price;

    이렇게 하면 price 그룹에서 최상단에 있는 것만 출력 된다

     

    Group by 2

    -계산된 결과로 group by 하고 싶은 경우

    SELECT ROUND(imdb_rating),
        COUNT(name)
    FROM movies
    GROUP BY ROUND(imdb_rating)
    ORDER BY ROUND(imdb_rating);

    -하지만 이러한 쿼리는 time-consuming. 오류를 만들기 쉽고 쓰는데.

    -이런 쿼리를 다음과 같이 표현 있다.

    SELECT ROUND(imdb_rating)
        COUNT(name)
    FROM movies
    GROUP BY 1
    ORDER BY 1;

    -1, 2, 3 …. select 문의 첫번째, 두번째, 세번째.. 요소를 뜻한다.

    -Group by 순소는 select 문의 요소 순서를 안따라도 된다.

      EX) GROUP BY 1, 2, 3       ,     GROUP BY 3, 1, 2

     

    Having

    -Group by에서 SQL 어떤 group 포함할껀지 뺄껀지 filter 있다.

    -예를 들어 특정 조건에 의해 영화를 조회하는데 10 이내로 하고 싶을

    -우리는 rows 제한하기 위한 것이 아니라 group 제한하고 싶으므로 where 없다.

    -이때 HAVING 써야 한다.

    SELECT yearm
        genre,
        COUNT(name)
    FROM movies
    GROUP BY 1, 2
    HAVING COUNT(name) > 10;

    -계산된 property having rows where 써야 한다.

    -HAVING 항상 GROUP BY 뒤에 나오고 ORDER BY, LIMIT 앞에 나온다.

    -where절은 having 절과 함께 사용 있다.

    SELECT pirce,
    ROUND(AVG(downloads)),
    COUNT(*)
    FROM apps
    GROUP BY price HAVING COUNT(*) > 10;
    
    --Result--
    |price|ROUND(AVG(downloads))|COUNT(*)|
    --------------------------------------
    |0.0  |  15762.0            | 73     |
    |0.99 |  15972.0            | 43     |
    |1.99 |  16953.0            | 42     |
    |2.99 |  17725.0            | 21     |
    |14.99|  19369.0            | 12     |

     

    REVIEW

    COUNT: row 개수를

    SUM: COLUMN 합을 구함

    MAX/MIN: 가장 /작은 값을 구함

    AVG: COLUMN 평균을 구함

    ROUND: COLUMN 값들을 반올림함

     

    GROUP BY: 하나 이상의 columns 데이터를 결합

    HAVING: 계산된 값에 조건을 추가.

Designed by Tistory.