SQL 오답 노트

도로롱·2025년 4월 1일

SQL

목록 보기
17/19

1. 집계 함수 + CASE WHEN 절 : 조건 값을 걸면서, 그 값에 집계를 하고 싶을때

  • 각 부서별 여자와 남자의 숫자를 구하고 싶을때
    ㅇ 각 부서로 그룹핑
    ㅇ GENDER 별로 나누기 ---> CASE WHEN 절 사용

SELECT
	E.department,
    SUM(case when E.gender = 'M' THEN 1 ELSE 0 END) AS "MALE_CNT",
    SUM(case when E.gender ='F' THEN 1 ELSE 0 END) AS "FEMALE_CNT"
FROM
	EMPLOYEE E
GROUP BY
	E.department


2. union 함수

union

  • 같은 열을 가지고 있을 경우 아래 + 위 합치는 개념
  • SQL에서 두 개 이상의 결과 집합을 결합할 때 사용되며, 기본적으로 두 집합의 컬럼 수와 순서가 같아야 합니다
  • UNION은 컬럼 이름이 달라도 상관없습니다. 다만, UNION 연산자는 결과로 반환되는 컬럼 이름은 첫 번째 쿼리의 컬럼 이름을 따릅니다.
  • UNION을 사용할 때 컬럼의 데이터 형식(예: INT, VARCHAR 등)이 다르면 SQL에서 에러가 발생할 수 있습니다. 두 쿼리의 동일한 위치에 있는 컬럼들의 데이터 형식이 호환 가능해야 합니다
  • CTE를 활용 하여 UNION을 해야 할 때
WITH EmployeeData AS (
    SELECT employee_id, name, department
    FROM employees
    WHERE department = 'Sales'
),
StaffData AS (
    SELECT employee_id, name, department
    FROM staff
    WHERE department = 'Sales'
)
SELECT * FROM EmployeeData ----------- CTE 1
UNION
SELECT * FROM StaffData -------------- CTE 2
  • UNION과 UNION ALL의 차이점 : UNION과 UNION ALL은 둘 다 두 개 이상의 쿼리 결과를 결합하는 데 사용됩니다. 그러나 그 동작 방식에서 중요한 차이점이 있습니다.
    "중복 제거 여부"
  • UNION: 결합된 결과에서 중복된 행을 제거합니다. 즉, 동일한 데이터가 여러 번 나타나지 않도록 자동으로 필터링합니다.
  • UNION ALL: 결합된 결과에서 중복을 제거하지 않고 모든 행을 그대로 포함합니다. 즉, 두 쿼리에서 동일한 데이터가 여러 번 나올 수 있습니다.

3. COALESCE : NULL이 나올 때 원하는 값으로 지정

  • 한 컬럼이 NULL 값일 때 적용
SELECT 
	COALESCE(PHONE_NUMBER,"NO PHONE NUMBER AVAILABLE")
FROM
	~

  • 여러 컬럼이 NULL 일 때 적용
SELECT
	COALESCE(EMAIL, WORK_EMAIL, PERSONAL_EMAIL, "NO EMAIL PROVIDED")
    ---- 셋 중 가장 처음의 NULL 값이 아닌 값을 반영

  • COALESCE 사칙연산
  • TOTAL_INCOME = SALARY + BONUS
SELECT
	EMPLOYEE_ID,
	COALESCE(SALARY,0) + COALESCE(BONUS,0) AS "TOTAL_INCOME"
FROM
	EMPLOYEE

4. LAG/LEAD() 함수

  • lag: 현재 행의 이전 행에 있는 값을 가져옴
  • lead: 현재 행의 다음 행에 있는 값을 가져옴
    - lag/lead(컬럼이름, 숫자) : 해당 컬럼의 몇번 쨰 이전/다음의 행을 가져올 지 지정하는 값
profile
질문 없는 성장은 없다. 3년차 데이터 분석가

0개의 댓글