3.1 GROUP BY 문

SQL 언어는 매우 강력합니다. 간단한 데이터 가져오기 외에도 쿼리 시 데이터를 그룹화할 수 있습니다. 예를 들어, 우리가 가지고 있는 각 브랜드의 제품 종류를 알고 싶은데 어떻게 알 수 있습니까?

this 에 대한 특수 연산자가 있습니다 GROUP BY. 다음은 작성 방법입니다.

GROUP BY column

각 브랜드의 제품 유형 수를 표시하도록 SQL에 요청하는 쿼리를 작성해 보겠습니다. 이러한 요청은 다음과 같습니다.

SELECT brand, COUNT(*)
FROM product
GROUP BY brand

다음과 같은 쿼리 결과가 표시됩니다.

상표 세다(*)
(없는) 2
보쉬 4
이케아 6
엘지 2
스마트플라워 1

어떤 리퀘스트를 작성했는지, 어떤 결과를 얻었는지 꼼꼼히 분석해보자. 결과적으로 두 개의 열이 표시됩니다. 브랜드 목록이 있는 첫 번째 항목은 논리적입니다. 우리는 쌍 "브랜드 --> 수량" 과 같은 것을 얻고 싶었습니다 .

브랜드 이름 중에 이라는 단어가 있다는 점에 유의하십시오 NULL. 실제로 우리는 그것이 쓰여진 브랜드의 제품을 가지고 있으며 NULL여기에서 볼 수 있습니다. 조금 예상치 못했지만 도움이 되었습니다. 브랜드가 없는 제품이 얼마나 많은지 알 수 있습니다.

이제 요청을 자세히 살펴보겠습니다. 우리는 각 브랜드의 제품 수를 알고 싶어서 를 썼고 GROUP BY brand, 에서 브랜드 와 표현을 SELECT썼습니다.COUNT(*)

COUNT(*)행 그룹에서 수행되는 소위 집계 함수입니다. 우리의 경우 그녀는 단순히 숫자를 세었습니다. 그러한 기능이 많이 있으며 나중에 살펴 보겠습니다.

3.2 GROUP BY를 사용한 복잡한 쿼리

이제 가격이 10 미만인 제품을 먼저 버리고 그룹화하는 쿼리를 작성해 보겠습니다. 이러한 요청은 다음과 같습니다.

SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand

다음과 같은 쿼리 결과가 표시됩니다.

상표 세다(*)
보쉬 4
이케아 5
엘지 2
스마트플라워 1

NULL 제품이 매우 저렴했기 때문에 결과 테이블에서 모든 NULL 제품이 사라졌고 IKEA 제품 수가 1개 감소했습니다. 6개에서 5개로.

이것은 먼저 원하는 라인을 필터에 적용한 WHERE다음 그룹화를 결과에 적용하는 것을 제안합니다.

3.3 결과의 열 이름

그런데 결과 열에 이름을 지정할 수 있습니다. 서버가 어떻게 이름을 제안했는지 보십니까 count(*)? 합계로 바꾸겠습니다. 이러한 요청은 다음과 같습니다.

SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand

다음과 같은 쿼리 결과가 표시됩니다.

상표
보쉬 4
이케아 5
엘지 2
스마트플라워 1

기존 열의 이름을 바꿀 수도 있습니다. 이전에 사용한 쿼리 중 하나를 선택하고 열에 새 이름을 추가해 보겠습니다.

SELECT
id AS  product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL

다음과 같은 쿼리 결과가 표시됩니다.

제품 ID 상품명 가격
2 의자 5.00
8 램프 15.00