Categories: DataBase

SQL GROUP BY 와 HAVING 활용하기

GROUP BY 란?

GROUP BY는 SQL에서 사용되는 중요한 절 중 하나로, 특정 열을 기준으로 행을 그룹화하는 데 사용됩니다. 이를 통해 데이터를 더 의미 있고 집계된 형태로 가져올 수 있습니다. GROUP BY를 사용하면 특정 열의 고유한 값을 기준으로 행을 그룹화하고, 각 그룹에 대한 집계 함수를 적용할 수 있습니다.

HAVING 이란?

HAVING은 SQL에서 GROUP BY와 함께 사용되는 조건절 중 하나입니다. HAVING 절은 특정 그룹에 대한 조건을 지정하여 그룹화된 결과 중에서 특정 조건을 충족하는 그룹을 선택할 때 사용됩니다.

HAVING 절은 일반적으로 집계 함수와 함께 사용되며, GROUP BY로 그룹화된 결과에 대한 조건을 지정할 때 필요합니다. WHERE 절은 행 수준의 조건을 검사하는 반면, HAVING은 그룹 수준의 조건을 검사합니다.

WHERE 과 HAVING 차이점

WHERE와 HAVING은 SQL에서 데이터를 필터링하는 데 사용되는 두 가지 다른 종류의 조건절입니다. 각각의 특징과 차이점은 다음과 같습니다.

  1. 사용 위치:
    • WHERE: WHERE 절은 일반적으로 행 수준의 조건을 필터링하는 데 사용됩니다. 데이터를 가져오거나 수정할 때 사용되며, 특정 열의 값에 대한 조건을 지정하여 해당 행을 선택합니다.
    • HAVING: HAVING 절은 GROUP BY와 함께 사용되어 그룹 수준의 조건을 필터링하는 데 사용됩니다. 주로 집계 함수와 함께 사용되며, 그룹화된 결과에 대한 조건을 지정하여 특정 그룹을 선택합니다.
  2. 적용 대상:
    • WHERE: WHERE는 그룹화되기 전에 데이터를 필터링합니다. 따라서 GROUP BY가 없는 일반적인 쿼리에서 사용됩니다.
    • HAVING: HAVING은 GROUP BY와 함께 사용되어 집계된 결과에 대한 조건을 필터링합니다. 그룹화된 데이터에 대한 조건을 검사하므로 집계 함수와 관련이 있습니다.
  3. 집계 함수 사용:
    • WHERE: WHERE 절은 주로 집계 함수와 함께 사용되지 않습니다. 주로 개별 행에 대한 조건을 검사할 때 사용됩니다.
    • HAVING: HAVING 절은 주로 집계 함수와 함께 사용되어 그룹화된 결과에 대한 조건을 지정합니다. 특히, 집계된 결과에 대한 필터링이 필요한 경우에 사용됩니다.
  4. 문법적 차이:
    • WHERE: WHERE는 SELECT 문에서 FROM 다음에 나오고, GROUP BY 이전에 위치합니다.
    • HAVING: HAVING은 GROUP BY 이후에 나오며, 집계 함수와 함께 사용될 때 해당 집계 함수를 지정합니다.

간단히 말해, WHERE는 일반적인 행 수준의 조건을 처리하고, HAVING은 그룹 수준의 조건을 처리합니다. WHERE는 데이터를 그룹화하기 전에 필터링하며, HAVING은 그룹화된 결과에 대한 조건을 지정하여 특정 그룹을 선택합니다.

GROUP BY 사용법

GROUP BY는 SQL에서 데이터를 그룹화하고 집계 함수를 적용하는 데 사용되는 중요한 절 중 하나입니다. 아래는 GROUP BY의 사용법에 대한 설명입니다.

기본 문법

  • GROUP BY는 SELECT 문에서 FROM 다음에 위치하며, 집계 함수와 함께 사용됩니다.
SQL
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;
SQL

그룹화 기준 지정

  • GROUP BY 절은 특정 열 또는 열의 목록을 지정하여 데이터를 그룹화합니다.
  • 예를 들어, ORDER 테이블에서 customer_id를 기준으로 주문을 그룹화하려면 다음과 같이 작성할 수 있습니다.
SQL
SELECT customer_id, COUNT(order_id) as order_count
FROM orders
GROUP BY customer_id;
SQL

집계 함수 사용

  • GROUP BY와 함께 주로 집계 함수를 사용하여 각 그룹에 대한 결과를 계산합니다. 일반적으로 사용되는 집계 함수에는 SUM, AVG, COUNT, MIN, MAX 등이 있습니다.
  • 위의 예제에서 COUNT(order_id)는 각 고객 그룹에 대한 주문 수를 계산합니다.

여러 열로 그룹화

  • 여러 열을 기준으로 그룹화할 수 있습니다. 각 열은 쉼표로 구분됩니다.
  • 예를 들어, customer_id와 product_id를 기준으로 주문을 그룹화하려면 다음과 같이 작성할 수 있습니다.
SQL
SELECT customer_id, product_id, SUM(quantity) as total_quantity
FROM orders
GROUP BY customer_id, product_id;
SQL

정렬

  • GROUP BY로 그룹화된 결과는 기본적으로 그룹 기준 열을 기준으로 정렬됩니다.
  • 추가적인 정렬이 필요한 경우 ORDER BY를 사용할 수 있습니다. 예를 들어, 위의 예제에서 총 수량에 대한 내림차순 정렬을 추가하려면 다음과 같이 작성할 수 있습니다.
SQL
SELECT customer_id, product_id, SUM(quantity) as total_quantity
FROM orders
GROUP BY customer_id, product_id
ORDER BY total_quantity DESC;
SQL

✔️GROUP BY를 사용하면 데이터를 특정 기준으로 그룹화하여 집계된 결과를 얻을 수 있습니다. 이는 데이터 분석 및 집계 작업에서 매우 유용하며, SQL에서 자주 사용되는 기능 중 하나입니다.

HAVING 사용법

HAVING은 SQL에서 GROUP BY와 함께 사용되어 그룹화된 결과에 대한 조건을 지정하는데 사용되는 절입니다. HAVING을 사용하면 집계 함수를 기반으로 그룹을 필터링하거나 특정 조건을 만족하는 그룹만 선택할 수 있습니다. 아래는 HAVING의 사용법에 대한 설명입니다.

기본 문법

  • HAVING은 GROUP BY 다음에 나오며, 주로 집계 함수와 함께 사용됩니다.
SQL
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING condition;
SQL

집계 함수와 함께 사용

  • 주로 HAVING은 집계 함수와 함께 사용되어 그룹화된 결과에 대한 조건을 지정합니다.
  • 예를 들어, 주문된 총 수량이 100 이상인 고객 그룹만 선택하려면 다음과 같이 작성할 수 있습니다.
SQL
SELECT customer_id, SUM(quantity) as total_quantity
FROM orders
GROUP BY customer_id
HAVING total_quantity >= 100;
SQL

여러 조건과 논리 연산자 사용

  • 여러 조건을 조합하여 더 복잡한 조건을 만들 수 있습니다. 논리 연산자인 AND, OR, NOT을 사용할 수 있습니다.
SQL
SELECT customer_id, AVG(amount) as average_amount
FROM payments
GROUP BY customer_id
HAVING average_amount >= 500 AND average_amount <= 1000;
SQL

집계 함수 외의 일반 열 사용

  • HAVING은 집계 함수뿐만 아니라 일반 열에 대한 조건도 지정할 수 있습니다.
SQL
SELECT product_id, COUNT(order_id) as order_count
FROM order_details
GROUP BY product_id
HAVING order_count > 10 AND MAX(price) <= 100;
SQL

✔️HAVING을 사용하면 그룹화된 결과에 대한 조건을 자세하게 지정하여 필요한 데이터를 추출할 수 있습니다. 주로 집계 함수와 함께 사용되며, 데이터베이스에서 그룹화된 데이터에 대한 더 정교한 분석이 가능하게 됩니다.

결론

SQL에서 GROUP BY와 HAVING은 데이터를 그룹화하고 필요한 집계 결과를 얻기 위한 도구입니다. GROUP BY는 특정 열을 기준으로 행을 그룹화하고, 집계 함수를 사용하여 각 그룹에 대한 계산을 수행합니다. HAVING은 GROUP BY와 함께 사용되어 그룹화된 결과에 조건을 적용하여 특정 그룹을 선택합니다.

GROUP BY는 데이터를 논리적으로 정리하고 집계된 정보를 쉽게 확인할 수 있게 해주며, HAVING은 이러한 그룹화된 데이터에 대한 세부적인 조건을 지정하여 원하는 결과를 추출할 때 유용합니다. WHERE과 HAVING은 비슷한 역할을 하지만, HAVING은 GROUP BY와 함께 사용되는 특성적인 차이를 가지고 있습니다.

데이터베이스에서 쿼리를 작성할 때, GROUP BY와 HAVING을 적절히 활용하면 데이터의 특성에 대한 통계 및 분석을 쉽게 수행할 수 있습니다.👍

suover

Recent Posts

Java 자바 Set – HashSet, TreeSet, LinkedHashSet 정리

소개 자바에서 Set은 중복을 허용하지 않는 데이터 집합을 의미합니다. List와 달리 동일한 요소를 여러 번…

1개월 ago

Java 자바 Hash 해시 제대로 이해하기

해시(Hash)란 무엇인가? 해시(Hash)는 자바 프로그래밍에서 빠르고 효율적인 데이터 저장 및 검색을 위한 핵심적인 개념입니다. 이…

2개월 ago

Java 자바 리스트 (List) 정리

List란 무엇인가? List는 자바 컬렉션 프레임워크의 핵심 인터페이스 중 하나로, 순서가 있는 데이터를 다루는 데…

2개월 ago

Java 자바 LinkedList 동작 원리와 사용법

LinkedList란 무엇인가? LinkedList는 자바에서 유용하게 사용되는 자료구조 중 하나로, 연결 리스트 방식을 이용하여 데이터를 관리하는…

2개월 ago

Java 자바 ArrayList 동작 원리와 사용법

ArrayList란 무엇인가? ArrayList는 자바에서 가장 널리 사용되는 컬렉션 중 하나로, 가변 크기의 배열을 구현한 클래스입니다.…

2개월 ago

Java 자바 제네릭(Generic) 개념과 문법 알아보기

제네릭(Generic)이란? 자바 제네릭은 코드의 재사용성을 높이고 타입 안전성을 보장하는 중요한 개념입니다. 이 블로그 글에서는 자바…

2개월 ago