데이터 분석 - 기초 1

순동·2022년 3월 14일

📌 집계 함수

  1. COUNT()
    특정 컬럼의 개수
SELECT COUNT(email) FROM copang_main.member;

SELECT COUNT(height) FROM copang_main.member;

NULL은 COUNT()에 포함되지 않는다.

  1. COUNT(*)
SELECT COUNT(*) FROM copang_main.member;

COUNT(*) 는 전체 row 수를 나타낸다. NULL 여부와 관계 없다.

  1. MAX()
    최대값
SELECT MAX(height) FROM copang_main.member;
  1. MIN()
    최소값
SELECT MIN(weight) FROM copang_main.member;
  1. AVG()
    평균
SELECT AVG(weight) FROM copang_main.member;

AVG() 함수는 NULL이 있는 row는 제외하고 평균을 계산한다.

  1. SUM()
    합계
SELECT SUM(age) FROM copang_main.member;
  1. STD()
    표준편차
SELECT STD(age) FROM copang_main.member;

📌 산술 함수

  1. ABS()
    절대값
SELECT ABS(age) FROM copang_main.member;
  1. SQRT()
    제곱근
SELECT SQRT(age) FROM copang_main.member;
  1. CEIL()
    소수점 올림
SELECT CEIL(height) FROM copang_main.member;
  1. FLOOR()
    소수점 내림
SELECT FLOOR(height) FROM copang_main.member;
  1. ROUND()
    소수점 반올림
SELECT ROUND(height) FROM copang_main.member;

📝 집계 함수와 산술 함수의 차이점

  • 집계 함수는 특정 컬럼의 여러 row 값들을 동시에 고려해서 실행되는 함수
  • 산술 함수는 특정 컬럼의 각 row 값마다 실행되는 함수

📌 NULL 다루는 방법

NULL 은 값이 없음을 나타낸다. 아래 테이블에 NULL 값이 포함되어 있다.

✅ address 컬럼에 NULL이 있는 row만 조회

SELECT * FROM copang_main.member WHERE address IS NULL;

✅ address 컬럼에 NULL이 아닌 row만 조회

SELECT * FROM copang_main.member WHERE address IS NOT NULL;

✅ height, weight, address 컬럼 중 하나라도 NULL이 있는 row 조회

SELECT * FROM copang_main.member
WHERE height IS NULL
	OR weight IS NULL
    OR address IS NULL;

📝 NULL을 다른 단어로 바꾸기

  1. COALESCE
    COALESCE 는 합치다 라는 뜻이다.
SELECT
	COALESCE(height, '####'),
	COALESCE(weight, '---'),
	COALESCE(address, '@@')
FROM copang_main.member;

동작 방식은 다음과 같다.

  • height 컬럼에 값이 존재하면 그 값을 바로 돌려준다.
  • height 컬럼에 NULL이라면 '####'을 돌려준다.

📝 NULL에 관한 주의사항

📌 IS NULL 과 = NULL은 다르다.

  • NULL은 어떤 값이 아니기 때문에 등호(=)를 사용해서 어떤 값과 비교할 수 있는 대상이 아니다.
  • NULL인지를 확인할 때는 반드시 IS NULL을 사용해야 한다.

📌 NULL에는 어떤 연산을 해도 결국 NULL이다.

  • NULL에는 +, -, *, / 등 무엇을 하든 항상 NULL이다.

📌 이상값 제외

age 컬럼을 살펴보면 나이라기엔 비정상적으로 큰 숫자나 음수(-) 값이 들어있다.

SELECT age FROM copang_main.member;

SELECT AVG(age) FROM copang_main.member
WHERE age BETWEEN 5 AND 100;

address 컬럼을 보면 말도 안 되는 주소가 입력되어 있다.

SELECT address FROM copang_main.member;

정상적인 주소를 확인해보면 모두 ~호로 끝나는 걸 볼 수 있다.
이상한 주소를 가진 row만 조회해보자.

SELECT * FROM copang_main.member
WHERE address NOT LIKE '%호';


✅ 과제

review 테이블이 있다.

  1. 고객들이 남긴 리뷰 수와,
  2. 별점 평균값을 구하려고 한다.
  3. 댓글이 존재하는(comment 컬럼이 NULL이 아닌) 리뷰들의 개수와 그 별점들의 평균만 구하려고 한다.
  4. 그리고 별점의 평균값은 반올림을 해주려고 한다.

어떻게 해야할까? 직접 SQL 문을 작성해보아라.

❗ COUNT 함수는 COUNT(*)의 형식으로 사용하라. ❗

SELECT COUNT(*), ROUND(AVG(star)) FROM review
WHERE comment IS NOT NULL;

0개의 댓글