개발자공부일기
2024-10-18 본문
조회한 데이터에 아무 값이 없다면 어떻게 해야할까?
Mysql 에서는 사용할 수 없는 값일 때 해당 값을 연산에서 제외해줍니다.
=> 0으로 간주 => 평균값 계산시 원치않는 값이 나올 수 있음
그래서 IS NOT NULL로 NULL이 아닌 값들만 포함하게 한다.
SELECT name,
email
FROM users
WHERE email IS NOT NULL
이 쿼리는 users 테이블에서 email 열에 값이 있는 사용자들만 조회합니다.
이메일이 NULL인 행은 결과에서 제외됩니다.
IS NOT NULL이 유용한 상황
- 필수 데이터를 필터링할 때: 특정 컬럼이 반드시 값을 가져야 하는 경우에 유용합니다.
- 데이터 정합성 검사: NULL 값을 허용하지 않는 컬럼이나, 잘못된 데이터가 입력된 경우를 걸러낼 수 있습니다.
주의할 점
- NULL은 알 수 없는 값이기 때문에, NULL과의 직접 비교는 불가능합니다. 예를 들어, 다음과 같은 조건은 올바르게 작동하지 않습니다
WHERE column_name != NULL
이 대신 반드시 IS NOT NULL 또는 IS NULL을 사용해야 합니다.
Pivot Table
Pivot table 이란? : 2개 이상의 기준으로 데이터를 집계할 때, 보기 쉽게 배열하여 보여주는 것을 의미합니다.
Product | Month | Sales |
A | January | 100 |
A | February | 150 |
B | January | 200 |
B | February | 250 |
이 데이터를 월별 제품 판매 보고서로 변환하고 싶다면, Pivot 테이블을 사용할 수 있습니다.
SELECT Product,
SUM(CASE WHEN Month = 'January' THEN Sales END) AS January,
SUM(CASE WHEN Month = 'February' THEN Sales END) AS February
FROM sales
GROUP BY Product
결과:
Product | January | February |
A | 100 | 150 |
B | 200 | 250 |
업무 시작을 단축시켜 주는 마법의 문법 (Window Function - RANK, SUM)
Window Function 의 기본 구조
WINDOW_FUNCTION(argument) OVER (PARTITION BY 그룹 기준 컬럼 ORDER BY 정렬 기준)
window_function : 기능 명을 사용해줍니다. (sum, avg 와 같이 기능명이 있습니다)
argument : 함수에 따라 작성하거나 생략합니다.
partition by : 그룹을 나누기 위한 기준입니다. group by 절과 유사하다고 생각해주시면 됩니다.
order by : window function 을 적용할 때 정렬 할 컬럼 기준을 적어줍니다.
window_function(argument) over (partition by 그룹 기준 컬럼 order by 정렬 기준)
1. SUM() 윈도우 함수
SUM() 윈도우 함수는 누적 합계를 계산하는 데 사용됩니다. 일반 SUM()과 달리, 윈도우 함수로 사용하면 현재 행과 이전 행들의 값을 기준으로 합계를 구할 수 있습니다.
SELECT name, department, salary,
SUM(salary) OVER (PARTITION BY department ORDER BY salary) AS running_total
FROM employees
결과:
name | department | salary | running_total |
Alice | Sales | 3000 | 3000 |
Bob | Sales | 5000 | 8000 |
Charlie | Marketing | 4000 | 4000 |
David | Marketing | 6000 | 10000 |
2. RANK() 윈도우 함수
RANK() 윈도우 함수는 각 행에 대해 순위를 매깁니다. 같은 값이 있을 경우 동일한 순위를 부여하며, 그 다음 순위는 건너뜁니다.
SELECT name, department, salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS salary_rank
FROM employees
결과:
name | department | salary | salary_rank |
Bob | Sales | 5000 | 1 |
Alice | Sales | 3000 | 2 |
David | Marketing | 6000 | 1 |
Charlie | Marketing | 4000 | 2 |
날짜 포맷 DATE_FORMAT()
DATE_FORMAT() 함수는 SQL에서 날짜 데이터를 특정 형식으로 변환하는 데 사용되는 함수입니다.
DATE_FORMAT(date, format)
- date: 포맷을 적용할 날짜 또는 datetime 값.
- format: 원하는 형식을 지정하는 문자열. 다양한 포맷 문자열을 사용하여 출력할 날짜의 형식을 정의할 수 있습니다.
포맷 문자열
DATE_FORMAT()에서 사용할 수 있는 주요 포맷 문자열은 다음과 같습니다:
포맷 | 설명 | 예시 |
%Y | 4자리 연도 | 2024 |
%y | 2자리 연도 | 24 |
%m | 2자리 월 (01-12) | 10 |
%b | 약어 월 (Jan-Dec) | Oct |
%M | 전체 월 이름 | October |
%d | 2자리 일 (01-31) | 18 |
%H | 24시간 형식의 시 (00-23) | 14 |
%i | 분 (00-59) | 30 |
%s | 초 (00-59) | 00 |
%W | 주의 전체 이름 | Thursday |
%w | 주의 번호 (0 = 일요일) | 4 |
예제
기본적인 날짜 포맷 변경
SELECT DATE_FORMAT('2024-10-18', '%Y-%m-%d') AS formatted_date
#결과: 2024-10-18
다양한 형식으로 날짜 출력
SELECT DATE_FORMAT('2024-10-18 14:30:00', '%d/%m/%Y') AS formatted_date
#결과: 18/10/2024
월과 일 포함하여 표시
SELECT DATE_FORMAT('2024-10-18', '%M %d, %Y') AS formatted_date
#결과: October 18, 2024
시간 포함하여 표시
SELECT DATE_FORMAT('2024-10-18 14:30:00', '%Y-%m-%d %H:%i:%s') AS formatted_datetime
#결과: 2024-10-18 14:30:00
'TIL(Today I Learned)' 카테고리의 다른 글
2024-10-22 (0) | 2024.10.22 |
---|---|
2024-10-21 (0) | 2024.10.21 |
2024-10-17 (0) | 2024.10.17 |
2024-10-16 (0) | 2024.10.16 |
2024-10-15 (0) | 2024.10.15 |