2016-10-11 2 views
2

는 줌에 따라 크기를 합산, TEMPORARY TABLE각 열의 합계는 어떻게 얻을 수 있습니까?

CREATE TEMP TABLE total(
gid SERIAL, 
zoom smallint NOT NULL, 
point integer NOT NULL, 
size integer NOT NULL 
); 

데이터 삽입

INSERT INTO total(zoom, point, size) VALUES(9,51,21); 
INSERT INTO total(zoom, point, size) VALUES(9,75,45); 
INSERT INTO total(zoom, point, size) VALUES(9,74,34); 
INSERT INTO total(zoom, point, size) VALUES(10,75,4); 
INSERT INTO total(zoom, point, size) VALUES(10,72,63); 
INSERT INTO total(zoom, point, size) VALUES(10,85,22); 

계산 지점을 생성

SELECT zoom, 
     count(*) AS point, 
     SUM(size) AS size 
FROM total 
GROUP BY zoom 
ORDER BY zoom; 

결과 :

zoom | point | size 
------+-------+------ 
    9 |  3 | 100 
    10 |  3 | 89 
(2 rows) 

QUESTION

어떻게 각 열의 합계를 반환 할 수 있습니까?

구인 결과 :

zoom | point | size 
------+-------+------ 
    9 |  3 | 100 
    10 |  3 | 89 
------+-------+------   
Total |  6 | 189 
+1

관련이 없지만 숫자에 문자열 리터럴을 사용하지 마십시오. ''9 ''는 문자열입니다. '9'는 숫자 –

+0

@a_horse_with_no_name입니다. 나는 항상 그 사실을 잊어 버렸습니다. 나는 시정을했다. –

+2

다소 오래된 9.3 버전이 붙어 있습니까? 9.5에서는'rollup (줌)에 의한 그룹화 '를 할 수 있습니다. –

답변

3

롤업을 시뮬레이션 할 수있는 방법은 단순히 롤업을하는 두 번째 쿼리를 실행하는 것입니다. 그러나 열의 모든 값은 동일한 데이터 유형을 가져야합니다. 당신은 당신이뿐만 아니라 텍스트에 기본 쿼리 수 zoom을 변환해야 'Total' 레이블을 표시 할 것처럼 :

당신이 실제 줌 값에 의해 종류에 원하는대로, 당신은 또한 정수를 유지해야 결과의 값. 습니다와

zoom | point | size 
------+-------+----- 
9  |  3 | 100 
10 |  3 | 89 
Total |  6 | 189 

:

sort_order

select zoom, point, size 
FROM (
    SELECT zoom::text as zoom, 
     zoom as zoom_value, 
     count(*) AS point, 
     SUM(size) AS size, 
     1 as sort_order 
    FROM total 
    GROUP BY zoom 
    UNION ALL 
    SELECT 'Total', 
     null, 
     count(*) AS point, 
     SUM(size) AS size, 
     2 as sort_order 
    FROM total 
) t 
order by sort_order, zoom_value; 

이 반환 "상단에있는"노동 조합의 첫 번째 부분에서 행이 실제로 남아 있는지 확인하는 것이 필요하다 최신 Postgres 버전을 사용하면 다음 작업을 수행 할 수 있습니다.

+0

답변과 설명에 감사드립니다. 이것은 매력처럼 작동합니다. 또한 v.9.5에서 롤업 버전을 사용해 보겠습니다. –

-1
SELECT 
zoom, 
SUM(point) AS point, 
SUM(size) AS size 
FROM 
(
SELECT zoom, 
     count(*) AS point, 
     SUM(size) AS size 
FROM total 
GROUP BY zoom 
) x 
ORDER BY zoom 
+0

이 질문에 대한 쿼리와 정확히 같은 결과를 반환합니다. http://rextester.com/TDD68340 –

+0

그러나 노력을 가져 주셔서 감사합니다. –

+0

나는 그것이 그룹을 사용했기 때문에 그것이라고 생각한다. 그룹별로, 나는 그것이 효과가 있다고 믿습니다. 코드가 편집되었습니다. – NonProgrammer

관련 문제