[SQL] WHERE와 HAVING & COUNT와 SUM의 차이점

아리엘 (Ariel)·2024년 6월 30일
1

SQL

목록 보기
9/9

1. WHERE와 HAVING의 차이점

WHERE 절은 개별 행을 필터링하는 데 사용되며, 그룹화 또는 집계되기 전에 적용됩니다.
HAVING 절은 그룹화된 결과를 필터링하는 데 사용되며, 그룹화 또는 집계된 후에 적용됩니다.


1-1. WHERE 절

WHERE 절은 그룹화 또는 집계되기 전의 개별 행에 적용됩니다.

  • 예제
-- salary가 50000 이상인 직원들 선택
SELECT *
FROM employees
WHERE salary >= 50000;

-- 특정 부서(department_id가 10인 부서)의 직원들 선택
SELECT *
FROM employees
WHERE department_id = 10;

1-2. HAVING 절

HAVING 절은 GROUP BY 절과 함께 사용되며, 그룹화된 데이터에 대한 조건을 지정하는 데 사용됩니다. HAVING 절은 그룹화 또는 집계된 후의 결과에 적용됩니다.

  • 예제
-- 각 부서의 평균 급여가 60000 이상인 부서 선택
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) >= 60000;

-- 직원 수가 5명 이상인 부서 선택
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id
HAVING COUNT(*) >= 5;

1-3. WHERE 절과 HAVING 절의 차이점

  1. 적용 시점
  • WHERE 절: 그룹화 또는 집계되기 전에 개별 행에 적용됩니다.
  • HAVING 절: 그룹화 또는 집계된 후의 결과에 적용됩니다.
  1. 사용 용도
  • WHERE 절: 개별 행을 필터링하는 데 사용됩니다.
  • HAVING 절: 그룹화된 결과를 필터링하는 데 사용됩니다.
  1. 사용 가능 함수
  • WHERE 절: 일반 조건과 필터링을 위해 사용됩니다. 집계 함수는 사용할 수 없습니다.
  • HAVING 절: 집계 함수와 함께 사용되어 그룹화된 결과를 필터링합니다.
  1. 구문 위치
  • WHERE 절: FROM 절 바로 뒤에 위치합니다.
  • HAVING 절: GROUP BY 절 바로 뒤에 위치합니다.

예제 (WHERE 절과 HAVING 절을 함께 사용)

-- 특정 부서 중 직원 수가 5명 이상이고 평균 급여가 60000 이상인 부서 선택
SELECT department_id, AVG(salary) AS avg_salary, COUNT(*) AS employee_count
FROM employees
WHERE department_id IN (10, 20, 30)  -- 특정 부서 조건
GROUP BY department_id
HAVING COUNT(*) >= 5 AND AVG(salary) >= 60000;


2. COUNT와 SUM의 차이점

COUNT 함수는 행의 수를 세는 데 사용되며, SUM은 숫자 컬럼의 값들의 합계를 계산하는 데 사용됩니다.


2-1. COUNT 함수

COUNT 함수는 데이터베이스 테이블에서 특정 컬럼의 행 수를 계산하는 데 사용됩니다. 주로 레코드의 개수를 세는 데 사용되며, 특정 조건을 만족하는 행의 수를 세거나 전체 행의 수를 셀 수 있습니다.

  • 전체 행 수 세기
SELECT COUNT(*) 
FROM 테이블명;
  • 특정 컬럼의 값이 있는 행 수 세기
SELECT COUNT(컬럼명) 
FROM 테이블명;
  • 조건을 만족하는 행 수 세기
SELECT COUNT(컬럼명) 
FROM 테이블명 WHERE 조건;

2-2. SUM 함수

SUM 함수는 지정된 숫자 컬럼의 값들의 합계를 계산하는 데 사용됩니다. 주로 숫자 데이터를 집계할 때 사용됩니다.

  • 특정 컬럼의 값 합계 구하기
SELECT SUM(컬럼명) FROM 테이블명;
  • 조건을 만족하는 값 합계 구하기
SELECT SUM(컬럼명) FROM 테이블명 WHERE 조건;

2-3. COUNT 함수와 SUM 함수의 차이점

  1. 기능의 차이
  • COUNT: 행의 수를 셉니다.
  • SUM: 숫자 컬럼의 값들의 합계를 계산합니다.
  1. 사용 대상
  • COUNT: 모든 데이터 타입(숫자, 문자열, 날짜 등)의 행 수를 셀 수 있습니다.
  • SUM: 숫자 데이터 타입의 합계를 계산하는 데 사용됩니다.
  1. NULL 값 처리
  • COUNT(컬럼명): NULL 값을 무시하고 세지 않습니다.
  • COUNT(*): NULL 값을 포함하여 모든 행을 셉니다.
  • SUM(컬럼명): NULL 값을 무시하고 합계를 계산합니다.
  1. 집계의 결과
  • COUNT: 결과가 항상 0 이상의 정수입니다.
  • SUM: 결과는 숫자 값이며, 값들의 합계입니다.


📌 문제 상황

# 하나의 입장권고유번호에 대해 예매건수<취소건수인 데이터 찾기
SELECT 입장권고유번호
FROM kopis_2021_12_first
GROUP BY 입장권고유번호
WHERE COUNT(`예매/취소구분`=1)<COUNT(`예매/취소구분`=2);

입장권고유번호에 대해 예매건수<취소건수인 데이터가 있는지 확인할 때 위의 쿼리는 오류가 발생합니다.


✅ 해결 방법

WHERE 절은 그룹화된 결과에 조건을 적용할 수 없기 때문에, HAVING 절을 사용해야 합니다.
COUNT 함수는 조건에 따라 값을 세는 것이 아니라, 조건이 참인 경우에만 카운트합니다. 따라서, SUM 함수를 사용합니다.

SELECT 입장권고유번호
FROM kopis_2021_12_first
GROUP BY 입장권고유번호
HAVING SUM(`예매/취소구분` = 1) < SUM(`예매/취소구분` = 2);



💡 질문과 피드백은 댓글에 남겨주시기 바랍니다.
❤️ 도움이 되셨다면 공감 부탁드립니다.


profile
Data Analyst / Engineer

0개의 댓글

관련 채용 정보