PostgreSQL select 문의 값을 동일한 문 내에서 변수로 사용

다니엘 툴프

내 PostgreSQL 데이터베이스에 여러보기에서 기초로 사용하는 매우 복잡한 SQL 문이 있습니다. 그러나이 문에서는 합계 집계 함수가 여러 번 호출됩니다. 이제 변수를 사용하여 이러한 값을 여러 번 요약하는 것을 제거하여 이러한 뷰를 최적화하려고합니다.

@myvalue = 1을 사용할 수 있다는 것을 알고 있지만 이것은 pgScript에 있으며 pgScript이므로 뷰에서 사용할 수 없습니다.

나는 변수를 저장하기 위해 구성 설정을 남용하는 것에 대해 읽었지만 이것이 뷰에서 어떻게 작동하는지 모르고 그러한 해킹을 정말로 좋아하지 않습니다.

변수에 저장하고 싶은 SQL 부분은 sum(v."Surface")::double precision여러 번 반복됩니다.

이 SQL을 최적화하기위한 다른 제안이 있다면 나는 그것을위한 것입니다.

CREATE OR REPLACE VIEW mydb."MyTable" AS 
SELECT p."Id",
    v."FunctionInt",
    v."TypeInt",
    sum(v."Surface") AS "SurfaceTotaal",
    round((sum(v."Surface"::double precision * v."Average") / sum(v."Surface")::double precision)::numeric, 1) AS "Average",
    round((sum(v."Surface"::double precision * v."E") / sum(v."Surface")::double precision)::numeric, 1) AS "E",
    round((sum(v."Surface"::double precision * v."E1") / sum(v."Surface")::double precision)::numeric, 1) AS "E1",
    round((sum(v."Surface"::double precision * v."E2") / sum(v."Surface")::double precision)::numeric, 1) AS "E2",
    round((sum(v."Surface"::double precision * v."E3") / sum(v."Surface")::double precision)::numeric, 1) AS "E3",
    round((sum(v."Surface"::double precision * v."M") / sum(v."Surface")::double precision)::numeric, 1) AS "M",
    round((sum(v."Surface"::double precision * v."M1") / sum(v."Surface")::double precision)::numeric, 1) AS "M1",
    round((sum(v."Surface"::double precision * v."M2") / sum(v."Surface")::double precision)::numeric, 1) AS "M2",
    round((sum(v."Surface"::double precision * v."M3") / sum(v."Surface")::double precision)::numeric, 1) AS "M3",
    round((sum(v."Surface"::double precision * v."G") / sum(v."Surface")::double precision)::numeric, 1) AS "G",
    round((sum(v."Surface"::double precision * v."G1") / sum(v."Surface")::double precision)::numeric, 1) AS "G1",
    round((sum(v."Surface"::double precision * v."G2") / sum(v."Surface")::double precision)::numeric, 1) AS "G2",
    round((sum(v."Surface"::double precision * v."G3") / sum(v."Surface")::double precision)::numeric, 1) AS "G3",
    round((sum(v."Surface"::double precision * v."G4") / sum(v."Surface")::double precision)::numeric, 1) AS "G4"
FROM mydb."PTable" p,
LATERAL ( 
    SELECT 
        v."Id",
        v."Surface",
        v."FunctionInt",
        v."TypeInt",
        r."YearGroupInt",
        r."Average",
        r."En" AS "E",
        r."En1" AS "E1",
        r."En2" AS "E2",
        r."En3" AS "E3",
        r."Mi" AS "M",
        r."Mi1" AS "M1",
        r."Mi2" AS "M2",
        r."Mi3" AS "M3",
        r."Gz" AS "G",
        r."Gz1" AS "G1",
        r."Gz2" AS "G2",
        r."Gz3" AS "G3",
        r."Gz4" AS "G4"
    FROM mydb."VTable" v
    JOIN mydb."RTable" r ON 
            v."FunctionInt" = r."FunctionInt" 
            AND v."TypeInt" = r."TypeInt" 
            AND v."YearGroupInt" = r."YearGroupInt"
    WHERE v."PId" = p."Id") v
GROUP BY p."Id", v."FunctionInt", v."TypeInt";
에반 캐롤

sum(v."Surface")::double precision여러 번 계산 된 가정 이 잘못되었습니다. 플래너가 처리하고 직접 테스트합니다.

CREATE TABLE foo AS
SELECT * FROM generate_series(1,1E7) AS t;

그때..

EXPLAIN ANALYZE SELECT sum(t) FROM foo;

이제 두 개로 시도해보세요 (감각 할만한 속도 저하 없음)

EXPLAIN ANALYZE SELECT sum(t), sum(t) FROM foo;

플래너는 상수를 접지 않습니다.

EXPLAIN ANALYZE SELECT sum(t), sum(t+0) FROM foo;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

삽입 쿼리에서 Select 문에서 동일한 값 사용

분류에서Dev

PostgreSQL : 함수의 CASE 표현식 내에서 SELECT 문을 사용하는 방법은 무엇입니까?

분류에서Dev

ROW_NUMBER () ORDER BY, 동일한 SELECT 문 내에서 열을 사용할 수 없습니다.

분류에서Dev

동일한 수의 행을 반환하는 테이블 값 함수에서 select 문을 사용하여 중복이없는 데카르트 곱

분류에서Dev

동일한 문서의 값을 사용하여 JSONB 문서 내의 배열에서 항목 선택

분류에서Dev

파워 쿼리의 SELECT 문에서 Excel 셀 값을 변수로 사용하는 방법은 무엇입니까?

분류에서Dev

Oracle의 select 문 내에서 select 사용

분류에서Dev

동일한 SQLPLUS INSERT INTO 문 내에서 SELECT 쿼리와 RETURNING을 모두 사용하는 방법

분류에서Dev

select 문 내에서 별칭을 사용할 수 있습니까?

분류에서Dev

if 문에 대한 조건으로 문자열 변수의 내용을 사용 하시겠습니까?

분류에서Dev

변수에 저장된 값을 사용하여 Oracle에서 select 문 작성

분류에서Dev

if 문에서 문자열의 내용을 조건으로 사용

분류에서Dev

변수를 전달하거나 동일한 내용의 IP 문자열을 넣을 때 asio 클라이언트 응용 프로그램에서 다른 결과

분류에서Dev

if 문 JS 외부의 if 문 내부에서 변경된 변수 값을 사용할 수 있습니까?

분류에서Dev

내장 함수의 매개 변수로 select 문을 사용할 수 있습니까?

분류에서Dev

SELECT FOR XML 문의 AS에서 열 값을 사용하는 방법

분류에서Dev

SQL FOR-IN (SELECT) 루프에서 문자열 변수 값 사용

분류에서Dev

BeautifulSoup을 사용한 XML 구문 분석 : 동일한 문서 내에서 동일한 ID로 여러 텍스트 콘텐츠 검색

분류에서Dev

select 문 내에서 select 문 외부에 정의 된 변수를 사용하는 방법

분류에서Dev

SELECT 문 내에서 동적으로 변수 설정

분류에서Dev

Set @var = Select 문 내에서 변수를 사용하는 방법

분류에서Dev

문자 스타일을 사용하여 MS Word 문서의 문장 내 프로그램 코드에 대한 맞춤법 검사를 끌 수 있습니까?

분류에서Dev

Oracle-SELECT 문에서 변수 사용

분류에서Dev

PostgreSQL : 'select'문 내에서 정수 값을 제공하는 방법은 무엇입니까?

분류에서Dev

Perl을 사용하여 ASCII의 16 진 문자열을 동일한 16 진 값으로 변환

분류에서Dev

동일한 열 내의 중복 값에 대해 IF 문을 수행하는 방법

분류에서Dev

이 문자가 JavaScript의 동일한 문자열 내에서 여러 번 사용될 때 특수 문자로 구분 된 끝에서 문자열을 자르는 방법은 무엇입니까?

분류에서Dev

if 문 내부의 변수에 다른 유형의 값을 할당 한 다음 if 문 다음에이 변수를 사용하는 방법은 무엇입니까?

분류에서Dev

postgresql을 사용하여 명령문별로 그룹에서 특정 값 선택

Related 관련 기사

  1. 1

    삽입 쿼리에서 Select 문에서 동일한 값 사용

  2. 2

    PostgreSQL : 함수의 CASE 표현식 내에서 SELECT 문을 사용하는 방법은 무엇입니까?

  3. 3

    ROW_NUMBER () ORDER BY, 동일한 SELECT 문 내에서 열을 사용할 수 없습니다.

  4. 4

    동일한 수의 행을 반환하는 테이블 값 함수에서 select 문을 사용하여 중복이없는 데카르트 곱

  5. 5

    동일한 문서의 값을 사용하여 JSONB 문서 내의 배열에서 항목 선택

  6. 6

    파워 쿼리의 SELECT 문에서 Excel 셀 값을 변수로 사용하는 방법은 무엇입니까?

  7. 7

    Oracle의 select 문 내에서 select 사용

  8. 8

    동일한 SQLPLUS INSERT INTO 문 내에서 SELECT 쿼리와 RETURNING을 모두 사용하는 방법

  9. 9

    select 문 내에서 별칭을 사용할 수 있습니까?

  10. 10

    if 문에 대한 조건으로 문자열 변수의 내용을 사용 하시겠습니까?

  11. 11

    변수에 저장된 값을 사용하여 Oracle에서 select 문 작성

  12. 12

    if 문에서 문자열의 내용을 조건으로 사용

  13. 13

    변수를 전달하거나 동일한 내용의 IP 문자열을 넣을 때 asio 클라이언트 응용 프로그램에서 다른 결과

  14. 14

    if 문 JS 외부의 if 문 내부에서 변경된 변수 값을 사용할 수 있습니까?

  15. 15

    내장 함수의 매개 변수로 select 문을 사용할 수 있습니까?

  16. 16

    SELECT FOR XML 문의 AS에서 열 값을 사용하는 방법

  17. 17

    SQL FOR-IN (SELECT) 루프에서 문자열 변수 값 사용

  18. 18

    BeautifulSoup을 사용한 XML 구문 분석 : 동일한 문서 내에서 동일한 ID로 여러 텍스트 콘텐츠 검색

  19. 19

    select 문 내에서 select 문 외부에 정의 된 변수를 사용하는 방법

  20. 20

    SELECT 문 내에서 동적으로 변수 설정

  21. 21

    Set @var = Select 문 내에서 변수를 사용하는 방법

  22. 22

    문자 스타일을 사용하여 MS Word 문서의 문장 내 프로그램 코드에 대한 맞춤법 검사를 끌 수 있습니까?

  23. 23

    Oracle-SELECT 문에서 변수 사용

  24. 24

    PostgreSQL : 'select'문 내에서 정수 값을 제공하는 방법은 무엇입니까?

  25. 25

    Perl을 사용하여 ASCII의 16 진 문자열을 동일한 16 진 값으로 변환

  26. 26

    동일한 열 내의 중복 값에 대해 IF 문을 수행하는 방법

  27. 27

    이 문자가 JavaScript의 동일한 문자열 내에서 여러 번 사용될 때 특수 문자로 구분 된 끝에서 문자열을 자르는 방법은 무엇입니까?

  28. 28

    if 문 내부의 변수에 다른 유형의 값을 할당 한 다음 if 문 다음에이 변수를 사용하는 방법은 무엇입니까?

  29. 29

    postgresql을 사용하여 명령문별로 그룹에서 특정 값 선택

뜨겁다태그

보관