SQL - 그룹 BY 절

안녕하세요, 미래의 SQL 마법사 여러분! 오늘 우리는 SQL 도구 상자에서 가장 강력한 도구 중 하나를 배울 것입니다: 그룹 BY 절. 여러분의 친절한 이웃 컴퓨터 교사로서, 저는 이 여정을 단계별로 안내해 드리겠습니다. 당신의 좋아하는 음료를 손에 들고, 편안하게 앉아 이 흥미로운 SQL 모험을 함께 시작해 보세요!

SQL - Group By Clause

SQL 그룹 BY 절

상상해 보세요, 거대한 도서관을 정리하고 있다고 합니다. 도서가 곳곳에 흩어져 있고, 장르별로 정리하고 싶습니다. SQL에서 그룹 BY 절이 하는 일은 바로 이와 같습니다 - 우리의 데이터를 깔끔하고 논리적인 그룹으로 정리하는 것입니다.

그룹 BY 절은 지정된 열에 같은 값을 가진 행을 그룹화하는 데 사용됩니다. 이는 종종 집계 함수와 함께 사용되어 각 그룹의 행에 대한 계산을 수행합니다.

간단한 예를 시작해 보겠습니다:

SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department;

이 쿼리는 우리의 직원을 부서별로 그룹화하고 각 부서에 얼마나 많은 직원이 있는지 계산합니다. 이는 "각 장르에 몇 권의 책이 있는지" 묻는 것과 같습니다.

그룹 BY 절과 집계 함수

이제 조금 더 흥미를 더해 보겠습니다. 그룹 BY는 집계 함수와 함께 사용될 때 진정한 빛을 발합니다. 집계 함수는 일련의 값을 계산하고 단일 결과를 반환합니다. 일반적인 집계 함수로는 COUNT(), SUM(), AVG(), MAX(), MIN()이 있습니다.

이 함수들의 표와 용도를 보여드리겠습니다:

함수 설명
COUNT() 행의 수를 계산합니다
SUM() 값의 합을 계산합니다
AVG() 값의 평균을 계산합니다
MAX() 값의 최대값을 반환합니다
MIN() 값의 최소값을 반환합니다

이제 이를 실제로 보겠습니다:

SELECT department,
COUNT(*) as employee_count,
AVG(salary) as avg_salary,
MAX(salary) as max_salary,
MIN(salary) as min_salary
FROM employees
GROUP BY department;

이 쿼리는 각 부서에 대해 다양한 정보를 제공합니다: 몇 명의 직원이 있는지, 평균 급여는 얼마인지, 최고 급여와 최저 급여는 얼마인지. 이는 우리의 도서관에서 각 장르에 대한 종합 보고서를 얻는 것과 같습니다!

단일 열에 대한 그룹 BY 절

occasionally, we want to focus on just one aspect of our data. Let's say we want to know how many employees we have in each role:

SELECT job_title, COUNT(*) as employee_count
FROM employees
GROUP BY job_title;

이 쿼리는 우리의 직원을 직책별로 그룹화하고 각 직책에 몇 명의 사람이 있는지 계산합니다. 이는 우리의 도서관에서 미스터리 소설, 로맨스 소설, 과학 소설의 수를 계산하는 것과 유사합니다.

여러 열에 대한 그룹 BY 절

하지만 한 열에 그치지 않아도 됩니다. 여러 열을 그룹화하여 더 구체적인 정보를 얻을 수 있습니다. 우리는 직원을 부서와 직책별로 그룹화해 보겠습니다:

SELECT department, job_title, COUNT(*) as employee_count
FROM employees
GROUP BY department, job_title;

이 쿼리는 각 부서별로 각 직책에 몇 명의 직원이 있는지 알려줍니다. 이는 우리의 도서관에서 장르별로, 그리고 각 장르 내에서 작가별로 정리하는 것과 같습니다.

그룹 BY와 ORDER BY 절

이제 결과에 순서를 더해 보겠습니다. ORDER BY 절은 그룹화된 데이터를 정렬하는 데 도움이 됩니다:

SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
ORDER BY employee_count DESC;

이 쿼리는 직원을 부서별로 그룹화하고, 그룹화된 결과를 직원 수의 내림차순으로 정렬합니다. 가장 많은 직원을 가진 부서가 먼저 보일 것입니다. 이는 우리의 도서관에서 가장 인기 있는 장르부터 가장 덜 인기 있는 장르로 정렬하는 것과 같습니다.

그룹 BY와 HAVING 절

마지막으로 HAVING 절에 대해 이야기해 보겠습니다. WHERE 절은 그룹화되기 전에 행을 필터링하는 반면, HAVING 절은 그룹 자체를 필터링합니다. "100권 이상의 책을 가진 장르만 보여달라"고 말하는 것과 같습니다.

SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING employee_count > 50;

이 쿼리는 50명 이상의 직원을 가진 부서만 보여줍니다. 이는 우리의 더 큰 부서나, 도서관의 더 인기 있는 장르에 집중하는 좋은 방법입니다.

그리고 여러분! 우리는 그룹 BY의 땅을 거쳐 여정을 마쳤습니다. 기본 사용에서 복잡한 응용까지, ORDER BY와 HAVING 절과 함께 사용합니다. 연습이 완벽을 만들기 때문에, 자신의 데이터셋에서 이 쿼리를 실험해 보지 마세요.

SQL은처음에는 두려울 수 있지만, 시간과 연습과 함께, 그룹화와 집계 데이터를 처리하는 마스터가 될 것입니다. 누가 알랴고, 당신은 세상을 그룹과 집계로 볼지도 모릅니다! (하지만 파티에서 친구들을 그룹화하려고 시도하지 마세요 - 믿으세요, 그렇게 되지 않습니다.)

계속 코딩하고, 계속 배우고, 가장 중요한 것은 SQL을 즐기세요!

Credits: Image by storyset