데이터 분석의 세계에 발을 들여놓으면서 SQL(Structured Query Language)의 중요성을 느끼는 분들이 많을 것입니다. 데이터베이스에서 정보를 추출하고, 정리하고, 분석하는 데 있어 SQL 쿼리는 필수적인 도구입니다. 이번 글에서는 SQL을 활용하여 복잡한 데이터 분석을 수행하는 방법을 알아보겠습니다.
SQL의 기본 구조
SQL은 데이터베이스와 상호작용하기 위해 사용하는 언어로, 기본적으로 SELECT, FROM, WHERE, JOIN, GROUP BY, HAVING 등의 구문으로 구성됩니다. 각 구문은 데이터를 검색하고 필터링하는 데 도움을 줍니다.
다음은 간단한 SQL 쿼리의 예입니다:
SELECT name, age
FROM users
WHERE age > 30;
위 쿼리는 users 테이블에서 나이가 30세 이상인 사용자들의 이름과 나이를 가져오는 예제입니다.
복잡한 데이터 분석을 위한 SQL 쿼리
이제 좀 더 복잡한 데이터 분석을 위한 SQL 쿼리를 작성해보겠습니다. 가상의 sales 테이블을 사용하여 각 제품의 총 매출을 계산해보겠습니다.
sales 테이블의 구조는 다음과 같습니다:
id: 판매 IDproduct_id: 제품 IDquantity: 판매 수량price: 제품 가격sale_date: 판매 날짜
우선, 각 제품의 매출을 계산하기 위해 GROUP BY와 SUM 함수를 사용할 수 있습니다.
SELECT product_id, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY product_id;
위 쿼리는 각 제품의 총 매출을 계산하여 total_sales라는 별칭으로 반환합니다.
데이터 필터링과 정렬
분석의 깊이를 더하기 위해 조건을 추가하거나 데이터를 정렬하는 방법도 알아보겠습니다. 예를 들어, 2023년 1월부터 3월까지의 매출 데이터를 분석하고 싶다면, WHERE 절을 사용하여 날짜 필터링을 할 수 있습니다. 또한, 매출이 높은 순서로 정렬하기 위해 ORDER BY 절을 추가하겠습니다.
SELECT product_id, SUM(quantity * price) AS total_sales
FROM sales
WHERE sale_date BETWEEN '2023-01-01' AND '2023-03-31'
GROUP BY product_id
ORDER BY total_sales DESC;
이 쿼리는 2023년 첫 분기의 각 제품별 총 매출을 계산하고, 매출이 높은 순서로 정렬하여 결과를 보여줍니다.
JOIN을 활용한 복잡한 분석
복잡한 데이터 분석에서는 다양한 테이블의 데이터를 결합하는 것도 중요합니다. 예를 들어, products 테이블이 있다고 가정해 보겠습니다. 이 테이블에는 product_id, product_name 두 개의 컬럼이 있습니다. 매출 데이터와 제품 정보를 결합하여 어떤 제품이 가장 많이 팔렸는지를 알아보겠습니다.
SELECT p.product_name, SUM(s.quantity * s.price) AS total_sales
FROM sales s
JOIN products p ON s.product_id = p.product_id
GROUP BY p.product_name
ORDER BY total_sales DESC;
위 쿼리는 sales 테이블과 products 테이블을 JOIN하여 제품 이름과 총 매출을 계산하고, 매출이 높은 순서로 정렬합니다.
서브쿼리를 활용한 고급 분석
서브쿼리(subquery)는 쿼리 내에서 또 다른 쿼리를 사용할 수 있는 문법입니다. 특정 제품군의 매출 데이터를 분석하고자 할 때 유용하게 사용될 수 있습니다. 예를 들어, 매출이 평균 이상인 제품을 찾는 쿼리를 작성해 보겠습니다.
SELECT product_name, total_sales
FROM (
SELECT p.product_name, SUM(s.quantity s.price) AS total_sales
FROM sales s
JOIN products p ON s.product_id = p.product_id
GROUP BY p.product_name
) AS sales_summary
WHERE total_sales > (SELECT AVG(total_sales) FROM
(SELECT SUM(s.quantity s.price) AS total_sales
FROM sales s
GROUP BY s.product_id) AS avg_sales);
이 쿼리는 각 제품의 총 매출을 계산한 후, 평균 매출 이상인 제품의 이름과 매출을 반환합니다.
마무리
SQL을 사용하여 복잡한 데이터 분석을 수행하는 방법에 대해 알아보았습니다. 기본적인 SELECT 문부터 시작하여 GROUP BY, JOIN, 서브쿼리 등 다양한 방법으로 데이터를 다루는 기법을 배웠습니다. 이러한 기술은 데이터 분석 직무에 필수적인 능력이며, 여러분의 데이터 분석 능력을 한층 끌어올리는 데 큰 도움이 될 것입니다.
앞으로도 다양한 데이터 분석 기법을 익혀 나가며 데이터의 가치를 최대한 활용해 보시기 바랍니다. SQL은 그 시작점일 뿐입니다!