SQL - Group By vs Order By

안녕하세요, SQL 열정가 여러분! 오늘 우리는 SQL의 두 가지 필수 조건절을 배울 것입니다: Group By와 Order By입니다. 친절한 이웃 컴퓨터 교사로서, 이 개념들을 안내해드리는 것을 기쁜 마음으로 생각합니다. 프로그래밍에 처음이라면 걱정하지 마세요 - 기본부터 차근차근 설명하겠습니다. 그럼 커피(또는 차, 당신의 취향에 따라)를 한 잔 마시고, SQL 모험을 시작해보세요!

SQL - Group By vs Order By

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;

이 쿼리는 다음과 같은 일을 합니다:

  1. product_namequantity_sold의 SUM을 SELECT 합니다.
  2. sales 테이블에서 이 데이터를 가져옵니다.
  3. 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;

이 쿼리는 다음과 같은 일을 합니다:

  1. 제품별로 판매를 그룹화합니다.
  2. 각 제품의 총 판매량을 계산합니다.
  3. 결과를 총 판매량이 높은 순서로 정렬합니다.

결과는 다음과 같을 수 있습니다:

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;

이 쿼리는 다음과 같은 일을 합니다:

  1. 판매를 제품과 날짜별로 그룹화합니다.
  2. 먼저 제품 이름을 오름차순으로 정렬합니다.
  3. 각 제품 그룹 내에서 일일 총 판매량을 내림차순으로 정렬합니다.

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;

이 쿼리는 다음과 같은 일을 합니다:

  1. 판매를 월별로 그룹화합니다.
  2. 각 제품의 월별 총 판매량을 계산합니다.
  3. 결과를 월별로 오름차순으로 정렬합니다.
  4. 각 월의 총 판매량을 내림차순으로 정렬합니다.
  5. 각 월의 상위 3개 제품만 보여줍니다.

이제 Group By와 Order By의 세계를 여행했습니다. 연습이 완벽함을 기억하십시오, 그러니 자신의 쿼리에서 이 조건절을 실험해보세요. 행복한 SQL 코딩을 하고, 데이터가 항상 잘 정리되고 완벽하게 정렬되기를 바랍니다!

Credits: Image by storyset