PostgreSQL-GROUP BY
PostgreSQL GROUP BY절은 SELECT 문과 공동으로 사용되어 동일한 데이터가있는 테이블의 행을 함께 그룹화합니다. 이는 출력에서 중복성을 제거하고 이러한 그룹에 적용되는 집계를 계산하기 위해 수행됩니다.
GROUP BY 절은 SELECT 문에서 WHERE 절 뒤에오고 ORDER BY 절 앞에옵니다.
통사론
GROUP BY 절의 기본 구문은 다음과 같습니다. GROUP BY 절은 WHERE 절의 조건을 따라야하며 ORDER BY 절이 사용되는 경우 앞에 와야합니다.
SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN
GROUP BY 절에 둘 이상의 열을 사용할 수 있습니다. 그룹화하는 데 사용하는 열이 무엇이든 해당 열을 열 목록에서 사용할 수 있어야합니다.
예
다음과 같은 레코드가 있는 테이블 COMPANY 를 고려하십시오.
# select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
(7 rows)
각 고객의 총 급여 금액을 알고 싶다면 GROUP BY 쿼리는 다음과 같습니다.
testdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;
이것은 다음 결과를 생성합니다-
name | sum
-------+-------
Teddy | 20000
Paul | 20000
Mark | 65000
David | 85000
Allen | 15000
Kim | 45000
James | 10000
(7 rows)
이제 다음 INSERT 문을 사용하여 COMPANY 테이블에 세 개의 레코드를 더 만들겠습니다.
INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00);
INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00);
INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00);
이제 우리 테이블에는 중복 된 이름을 가진 다음 레코드가 있습니다.
id | name | age | address | salary
----+-------+-----+--------------+--------
1 | Paul | 32 | California | 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
8 | Paul | 24 | Houston | 20000
9 | James | 44 | Norway | 5000
10 | James | 45 | Texas | 5000
(10 rows)
다시, 동일한 문을 사용하여 다음과 같이 NAME 열을 사용하는 모든 레코드를 그룹화합니다.
testdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
이것은 다음 결과를 생성합니다-
name | sum
-------+-------
Allen | 15000
David | 85000
James | 20000
Kim | 45000
Mark | 65000
Paul | 40000
Teddy | 20000
(7 rows)
다음과 같이 GROUP BY 절과 함께 ORDER BY 절을 사용하겠습니다.
testdb=# SELECT NAME, SUM(SALARY)
FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;
이것은 다음 결과를 생성합니다-
name | sum
-------+-------
Teddy | 20000
Paul | 40000
Mark | 65000
Kim | 45000
James | 20000
David | 85000
Allen | 15000
(7 rows)