숫자 값 빼기
SQL에서 숫자 값을 빼는 건 간단해요. 다른 프로그래밍 언어와 마찬가지로 - 연산자를 사용해 뺄셈을 해요.
테이블의 컬럼끼리 빼기
실제 매출과 예상 매출 수치를 저장하는 sales라는 테이블이 있다고 가정해 볼게요:
CREATE TABLE sales (
id INT PRIMARY KEY,
actual_sales DECIMAL(10, 2),
projected_sales DECIMAL(10, 2)
);
INSERT INTO sales (id, actual_sales, projected_sales)
VALUES
(1, 1000.00, 1200.00),
(2, 1500.00, 1500.00),
(3, 1300.00, 1250.00);
실제 매출과 예상 매출의 차이를 계산하려면 다음과 같은 쿼리를 작성하면 돼요:
SELECT
id,
actual_sales,
projected_sales,
actual_sales - projected_sales AS difference
FROM
sales;
예상 결과:
+----+--------------+-----------------+------------+
| id | actual_sales | projected_sales | difference |
+----+--------------+-----------------+------------+
| 1 | 1000.00 | 1200.00 | -200.00 |
| 2 | 1500.00 | 1500.00 | 0.00 |
| 3 | 1300.00 | 1250.00 | 50.00 |
+----+--------------+-----------------+------------+
3 rows in set (0.00 sec)
SQL에서 날짜 빼기
SQL에서는 날짜끼리 빼서 일, 월, 연 단위의 차이를 구할 수도 있어요. 방법은 사용하는 데이터베이스 시스템에 따라 달라요.
MySQL에서 날짜 빼기
start_date와 end_date 컬럼이 있는 employees 테이블을 생각해 볼게요:
CREATE TABLE employees (
id INT PRIMARY KEY,
start_date DATE,
end_date DATE
);
INSERT INTO employees (id, start_date, end_date)
VALUES
(1, '2023-01-01', '2023-08-01'),
(2, '2022-05-15', '2023-05-15'),
(3, '2023-03-01', '2023-03-31');
end_date와 start_date 사이의 일수 차이를 계산하려면 DATEDIFF 함수를 사용하면 돼요:
SELECT
id,
start_date,
end_date,
DATEDIFF(end_date, start_date) AS days_difference
FROM
employees;
예상 결과:
+----+------------+------------+-----------------+
| id | start_date | end_date | days_difference |
+----+------------+------------+-----------------+
| 1 | 2023-01-01 | 2023-08-01 | 212 |
| 2 | 2022-05-15 | 2023-05-15 | 365 |
| 3 | 2023-03-01 | 2023-03-31 | 30 |
+----+------------+------------+-----------------+
3 rows in set (0.01 sec)
타임스탬프 빼기
타임스탬프 빼기는 초, 분, 시간 등의 단위로 시간 차이를 계산해야 할 때 유용해요.
PostgreSQL에서 타임스탬프 빼기
이벤트의 시작 및 종료 타임스탬프를 저장하는 logs 테이블이 있다고 가정해 볼게요:
CREATE TABLE logs (
id SERIAL PRIMARY KEY,
start_time TIMESTAMP,
end_time TIMESTAMP
);
INSERT INTO logs (start_time, end_time)
VALUES
('2023-08-01 10:00:00', '2023-08-01 12:00:00'),
('2023-08-02 09:15:00', '2023-08-02 10:45:00');
end_time과 start_time 사이의 시간 차이를 계산하려면 EXTRACT 함수를 사용하면 돼요:
SELECT
id,
start_time,
end_time,
EXTRACT(EPOCH FROM end_time - start_time) / 3600 AS hours_difference
FROM
logs;
예상 결과:
id | start_time | end_time | hours_difference
----+---------------------+---------------------+--------------------
1 | 2023-08-01 10:00:00 | 2023-08-01 12:00:00 | 2.00
2 | 2023-08-02 09:15:00 | 2023-08-02 10:45:00 | 1.50
(2 rows)
Time: 9.567 ms
행 간 빼기
경우에 따라 서로 다른 행의 값을 빼야 할 때도 있어요. 보통 윈도우 함수를 사용해서 처리해요.
monthly_sales 테이블을 사용해 월별 매출 차이를 계산해 볼게요:
CREATE TABLE monthly_sales (
month DATE PRIMARY KEY,
total_sales DECIMAL(10, 2)
);
INSERT INTO monthly_sales (month, total_sales)
VALUES
('2023-01-01', 2000.00),
('2023-02-01', 2200.00),
('2023-03-01', 2100.00);
전월 대비 매출 차이를 계산하려면 LAG 함수를 사용하면 돼요:
SELECT
month,
total_sales,
total_sales - LAG(total_sales) OVER (ORDER BY month) AS sales_difference
FROM
monthly_sales;
예상 결과:
month | total_sales | sales_difference
------------+-------------+------------------
2023-01-01 | 2000.00 | [NULL]
2023-02-01 | 2200.00 | 200.00
2023-03-01 | 2100.00 | -100.00
(3 rows)
Time: 5.648 ms
결론
SQL의 뺄셈은 숫자, 날짜, 타임스탬프는 물론 행 간에도 적용할 수 있는 다재다능한 연산이에요. SQL 데이터베이스마다 문법에 차이는 있지만 기본 연산은 같아요. 핵심은 이런 미묘한 차이에 익숙해지는 거예요.
함께 읽으면 좋은 글:
Beekeeper Studio는 무료 오픈 소스 데이터베이스 GUI예요
지금까지 써 본 SQL 쿼리 & 에디터 도구 중 최고예요. 데이터베이스 관리에 필요한 모든 게 다 있어요. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio는 빠르고 직관적이며 사용하기 쉬워요. 다양한 데이터베이스를 지원하고 Windows, Mac, Linux에서 모두 잘 작동해요.
Beekeeper Studio 사용자 후기
"Beekeeper Studio가 예전 SQL 작업 방식을 완전히 대체했어요. 빠르고 직관적이라 데이터베이스 작업이 다시 즐거워졌어요."
"여러 데이터베이스 GUI를 써 봤지만, Beekeeper는 기능과 단순함 사이의 균형이 완벽해요. 그냥 잘 작동해요."