SQL - Group By vs Order By
안녕하세요, SQL 열정가 여러분! 오늘 우리는 SQL의 두 가지 필수 조건절을 배울 것입니다: Group By와 Order By입니다. 친절한 이웃 컴퓨터 교사로서, 이 개념들을 안내해드리는 것을 기쁜 마음으로 생각합니다. 프로그래밍에 처음이라면 걱정하지 마세요 - 기본부터 차근차근 설명하겠습니다. 그럼 커피(또는 차, 당신의 취향에 따라)를 한 잔 마시고, SQL 모험을 시작해보세요!
SQL Group By 조건절
Group By는 무엇인가요?
Group By 조건절은 데이터를 정리하는 도우미입니다. 혹시 복잡하게 정리되지 않은 옷장을 가지고 계신가요? Group By는 특정 특성(예: 색상 또는 옷의 종류)에 따라 옷을 깔끔하게 쌓아주는 역할을 합니다.
SQL 용어로는, Group By는 하나 이상의 열을 기준으로 데이터를 그룹화할 수 있게 해줍니다. 이는 특히 그룹에 대한 계산이나 요약을 수행하고자 할 때 유용합니다.
기본 문법
Group By 조건절의 기본 구조는 다음과 같습니다:
SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY column1, column2;
이를 설명해보겠습니다:
- 우리는 결과에 보고 싶은 열을 SELECT 합니다.
- 데이터를 가져올 테이블을 FROM 절에 지정합니다.
- GROUP BY 부분은 SQL이 어떤 열을 그룹화에 사용할지 알려줍니다.
예제 1: 제품별 판매 그룹화
가정해 봅시다. sales
테이블이 있다고 해요. 이 테이블에는 product_name
, quantity_sold
, sale_date
열이 있습니다. 이제 제품별로 판매를 그룹화해보겠습니다:
SELECT product_name, SUM(quantity_sold) as total_sold
FROM sales
GROUP BY product_name;
이 쿼리는 다음과 같은 일을 합니다:
-
product_name
과quantity_sold
의 SUM을 SELECT 합니다. -
sales
테이블에서 이 데이터를 가져옵니다. -
product_name
으로 GROUP BY하여 각 고유한 제품에 대해 그룹을 생성합니다.
결과는 다음과 같을 수 있습니다:
product_name | total_sold |
---|---|
Apple | 150 |
Banana | 200 |
Orange | 175 |
예제 2: 다중 열 그룹화
우리는 여러 열에 대해 그룹화할 수도 있습니다. 예를 들어, 판매를 제품과 날짜별로 그룹화하고 싶다면:
SELECT product_name, sale_date, SUM(quantity_sold) as daily_total
FROM sales
GROUP BY product_name, sale_date;
이 쿼리는 우리의 판매를 제품과 날짜별로 그룹화하여 각 제품의 일일 총 판매량을 보여줍니다.
SQL Order By 조건절
Order By는 무엇인가요?
Group By가 우리의 옷장 정리사라면, Order By는 옷을 가벼운 것부터 무거운 것으로, 짧은 것부터 긴 것으로 정리하는 역할을 합니다. 데이터를 특정 순서로 정렬하는 것입니다.
기본 문법
Order By 조건절의 기본 구조는 다음과 같습니다:
SELECT column1, column2
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC];
- ASC는 오름차순(가장 작은 것부터 가장 큰 것으로, 또는 A에서 Z로)을 의미합니다.
- DESC는 내림차순(가장 큰 것부터 가장 작은 것으로, 또는 Z에서 A로)을 의미합니다.
- 지정하지 않으면 SQL은 기본적으로 ASC를 가정합니다.
예제 3: 판매별 제품 정렬
제품의 총 판매량으로 정렬해보겠습니다:
SELECT product_name, SUM(quantity_sold) as total_sold
FROM sales
GROUP BY product_name
ORDER BY total_sold DESC;
이 쿼리는 다음과 같은 일을 합니다:
- 제품별로 판매를 그룹화합니다.
- 각 제품의 총 판매량을 계산합니다.
- 결과를 총 판매량이 높은 순서로 정렬합니다.
결과는 다음과 같을 수 있습니다:
product_name | total_sold |
---|---|
Banana | 200 |
Orange | 175 |
Apple | 150 |
예제 4: 다중 열 정렬
우리는 여러 열에 대해 정렬할 수도 있습니다:
SELECT product_name, sale_date, SUM(quantity_sold) as daily_total
FROM sales
GROUP BY product_name, sale_date
ORDER BY product_name ASC, daily_total DESC;
이 쿼리는 다음과 같은 일을 합니다:
- 판매를 제품과 날짜별로 그룹화합니다.
- 먼저 제품 이름을 오름차순으로 정렬합니다.
- 각 제품 그룹 내에서 일일 총 판매량을 내림차순으로 정렬합니다.
Group By와 Order By 비교
이제 Group By와 Order By를 모두 살펴보았으니, 비교해보겠습니다:
기능 | Group By | Order By |
---|---|---|
목적 | 데이터를 그룹으로 정리 | 데이터를 특정 순서로 정렬 |
사용 | 집계 함수와 함께 사용 | 집계 함수와 함께 사용할 수 있거나 없거나 |
결과 | 행의 수를 줄임(요약) | 행의 수는 변하지 않음 |
위치 | ORDER BY보다 앞에 위치 | GROUP BY(있다면) 후에 위치 |
기능성 | 집계 계산을 위한 그룹 생성 | 출력 행의 순서 결정 |
Group By 사용 시기
Group By를 사용할 때:
- 데이터를 요약하고자 할 때(예: 각 그룹의 합계나 평균을 구할 때).
- 그룹에 대한 계산을 수행하고자 할 때.
- 결과 set의 행 수를 줄이고자 할 때.
Order By 사용 시기
Order By를 사용할 때:
- 결과를 특정 순서로 정렬하고자 할 때.
- 데이터를 읽기 쉽고 논리적으로 정렬하고자 할 때.
- 데이터 set에서 가장 높은 또는 가장 낮은 값을 찾고자 할 때.
예제 5: Group By와 Order By 결합
마지막으로, 모든 것을 결합한 예제를 보겠습니다. 각 월별로 판매가 가장 높은 상위 3개 제품을 찾고 싶습니다:
SELECT
EXTRACT(MONTH FROM sale_date) as month,
product_name,
SUM(quantity_sold) as total_sold
FROM
sales
GROUP BY
EXTRACT(MONTH FROM sale_date), product_name
ORDER BY
month ASC, total_sold DESC
LIMIT 3;
이 쿼리는 다음과 같은 일을 합니다:
- 판매를 월별로 그룹화합니다.
- 각 제품의 월별 총 판매량을 계산합니다.
- 결과를 월별로 오름차순으로 정렬합니다.
- 각 월의 총 판매량을 내림차순으로 정렬합니다.
- 각 월의 상위 3개 제품만 보여줍니다.
이제 Group By와 Order By의 세계를 여행했습니다. 연습이 완벽함을 기억하십시오, 그러니 자신의 쿼리에서 이 조건절을 실험해보세요. 행복한 SQL 코딩을 하고, 데이터가 항상 잘 정리되고 완벽하게 정렬되기를 바랍니다!
Credits: Image by storyset