Postgresql 그룹 기준

Postgresql Geulub Gijun



Postgresql group by 절은 동일한 데이터를 가진 테이블의 행을 통합/결합하는 데 사용되는 기능입니다. 이 절은 주로 중복 데이터를 제거하고 동시성을 유지하기 위해 사용됩니다. 합계 또는 AVG 등과 같은 다른 집계를 계산할 때마다 이 group by 절은 PostgreSQL에서 사용되는 절이 많기 때문에 항상 사용됩니다. 그러나 각 절 사이에는 계층 구조가 있습니다.

FROM > WHERE > 'GROUP BY' > HAVING > SELECT > DISTINCT > ORDER BY > LIMIT

PostgreSQL의 작업은 'where'와 'Having' 절에 있습니다.







통사론



열 선택

더미 테이블에서

WHERE [조건]

GROUP BY firstcolumn, secondcolumn..

ORDER BY 첫 번째 열, 두 번째 열.. ;

예 1



기능별 그룹의 개념을 이해하기 위해 여기에서 예제를 사용합니다. 승객 표에서 일부 사람들의 성이 같은 것을 볼 수 있습니다. 서로 유사한 각 이름은 그룹을 형성하고 동일한 이름에 대해 합산하여 지불합니다. 아래 예에서 자세히 설명합니다.





>> 승객 GROUP BY lname에서 lname, SUM(지불)을 선택합니다.

승객의 성은 '결제' 열을 포함하는 내장 함수 'SUM'을 사용하여 선택됩니다. 그리고 같은 이름을 가진 사람들에 대한 지불을 추가하십시오. 예를 들어 'Javed'와 'saad'의 급여가 추가됩니다. 반면 'Malik'과 'Shams'는 개별적으로 언급됩니다.



마찬가지로 테이블 '병원'을 고려하십시오. 연령별로 도시를 그룹화하고 싶습니다. 이 예에서는 하나의 도시가 열에 두 번 이상 존재합니다. 각 도시는 동일한 도시 이름으로 그룹화됩니다. 도시의 각 그룹의 연령이 추가되어 단일 행을 형성합니다.

병원:

>> 도시 선택, 병원 GROUP BY 도시에서 SUM(나이);

예 2

또는 승객 테이블에서 ID가 있는 성을 선택하면 결과는 다른 테이블이 됩니다. 두 열을 함께 그룹화하면 공통 성을 가진 모든 승객의 ID가 다르기 때문에 각 승객의 이름이 표시되기 때문입니다. 합계는 별도의 열에서 계산되지만 여기에서는 lname 그룹화가 수행되지 않기 때문에 각 승객의 지불액이 그의 이름 앞에 언급됩니다.

이것은 여러 열이 있는 group by 절의 예입니다. 그룹화를 위해 여러 컬럼을 선택하면 단일 테이블로 그룹화하는 것과 비교하여 결과 값이 변경되기 때문입니다.

>> 승객 GROUP BY id, lname에서 id, lname, SUM(지불)을 선택합니다.

출력에서 첫 번째로 일반적이지 않은 모든 lname이 표시된 다음 동일한 항목이 표에 언급된다는 것을 알 수 있습니다.

예 3

이 예제에는 조인 조건과 group by 절이 있습니다. '조인'이 사용되었으므로 여기서는 두 개의 테이블을 사용했음을 의미합니다. 하나는 '항목'이고 다른 하나는 '주문'입니다.

항목:

명령:

우리는 “items” 테이블의 두 열 값을 “,”로 결합하기 위해 두 개의 문자열을 결합하는 연결 방법을 사용했으며 열을 통칭하여 “description”으로 명명했습니다. 선택 사항입니다. 따로 가져가셔도 됩니다. 이 쿼리에서 'USING' 키워드는 다른 테이블의 특정 열을 식별합니다. 항목 테이블의 주소는 '주문' 테이블의 주소 열과 일치합니다. 이것은 두 테이블 사이에 조인을 만들어 수행됩니다. 이전 예와 마찬가지로 두 열 모두 GROUP BY 절에 의해 선택됩니다.

>> 이름 선택 || ',' || 설명으로 범주, 항목 내부 조인 주문의 주소 USING(주소) GROUP BY 주소, 설명;

주문 주소와 일치하는 항목 주소가 있는 5개의 행이 선택되는 것을 볼 수 있습니다. 그러면 Description 열이 주소 열과 일치하게 됩니다.

마찬가지로, 두 테이블에서 나이 요소를 연결하는 또 다른 예가 있습니다. 하나는 '승객'이고 다른 하나는 '노동자'입니다. 연결은 이름과 성 사이에 있습니다. 이 두 이름은 두 이름 사이의 공백으로 구분됩니다. 여기에서 작업자 테이블의 일부를 가져왔습니다.

노동자:

쿼리는 작업자의 이름과 승객의 이름이 일치하는 지점인 승객의 나이가 age 열에 표시되도록 작동합니다.

>> fname 선택 || ' ' || full_name으로 승객.lname, 승객 내부의 승객.나이 사용 (fname) GROUP BY full_name, 승객.나이 ORDER BY 승객.나이;

한 행이 형성됩니다. full_name은 두 개의 열을 공백으로 결합하여 생성되며 주소는 승객의 이름과 작업자의 이름이 일치하는 곳에서 선택됩니다.

예 4

이 예제는 count() 함수를 사용하여 'items' 테이블의 ID를 계산하는 방법을 다룹니다. 이것은 다시 테이블의 ID로 그룹화됩니다.

>> id 선택, COUNT(id) FROM 항목 GROUP BY id;

id 열의 행은 그룹으로 분할됩니다. 각 그룹은 열에 나타나는 횟수만큼 열에서 계산됩니다. 결과 테이블에서 '카운트'라는 이름의 새 열이 생성되고 여기에서 각 그룹 앞에 카운트 값이 기록됩니다.

당신의 pgAdmin

이제 PostgreSQL의 대시보드 측에 몇 가지 예를 적용했습니다. 이러한 예는 항목 중 하나가 다른 항목과 다른 경우 원래 열의 소계 행을 형성하므로 값이 NULL로 반환되기 때문에 일부 정렬이 다릅니다.

첫 번째 예를 고려하십시오. 여기서는 두 개의 컬럼을 합친 컬럼명 “ALL”을 생성했습니다. 주소 및 카테고리. 'ALL' 열은 두 열의 값을 집합적으로 계산합니다. 주소 열은 '추가'로 그룹화되고 범주 열은 '고양이'로 별도로 그룹화됩니다. 사용된 두 테이블의 열 이름은 서로 일치할 수 있습니다. 따라서 각 테이블의 각 열은 특정 객체에 의해 액세스됩니다.

명령에 적용되는 조건은 ID와 주문 번호에 따라 다릅니다. 이 ID와 주문 번호가 모두 동일한 경우 데이터를 가져옵니다. 마찬가지로 이름에 대한 추가 조건도 추가됩니다.

>> SELECT o.address, category, count (*) AS “ALL”, GROUPING(o.address) AS “add” , GROUPING (category ) AS “cat” FROM items I, 주문 o where i.order_no = o. order_id AND i.address= '라호르' GROUP BY CUBE (o.address, category) ORDER BY 1, 2;

라호르 시의 경우 하나의 범주가 선택됩니다. 4가지 가능성이 있습니다. 때때로 장난감은 있지만 주소는 없습니다. 그 반대. 그러나 범주와 주소가 모두 존재하는 때가 있다.

이제 테이블에서 이름의 조건을 변경하고 테이블을 다른 테이블로 전환하면 됩니다. 'Items.address'가 'order.address'로 바뀌면 결과가 달라집니다.

결론

'Postgresql group by' 절은 집계 연산자를 집합 데이터에 적용하는 데 사용됩니다. 이 문서에서는 count 함수, 조인, 여러 열의 선택 및 그룹화와 함께 group by 절을 사용합니다. 이 튜토리얼이 독자들에게 가장 좋은 이해 수단이 될 것이라고 확신합니다.