
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

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: 결합된 결과에서 중복을 제거하지 않고 모든 행을 그대로 포함합니다. 즉, 두 쿼리에서 동일한 데이터가 여러 번 나올 수 있습니다.
- 한 컬럼이 NULL 값일 때 적용
SELECT
COALESCE(PHONE_NUMBER,"NO PHONE NUMBER AVAILABLE")
FROM
~

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

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

- lag: 현재 행의 이전 행에 있는 값을 가져옴
- lead: 현재 행의 다음 행에 있는 값을 가져옴
- lag/lead(컬럼이름, 숫자) : 해당 컬럼의 몇번 쨰 이전/다음의 행을 가져올 지 지정하는 값