>데이터 베이스 >MySQL 튜토리얼 >PostgreSQL 함수에서 결과 세트를 효율적으로 반환하는 방법은 무엇입니까?

PostgreSQL 함수에서 결과 세트를 효율적으로 반환하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-17 10:26:14194검색

How to Efficiently Return Result Sets in PostgreSQL Functions?

PostgreSQL 함수에서 결과 집합 반환

PostgreSQL에서 함수를 작성할 때 결과 집합을 반환해야 하는 경우가 많습니다. 제공된 함수 wordFrequency가 SETOF RECORD 반환 유형으로 올바르게 정의되었습니다. 그러나 현재 구현에는 쿼리 결과를 반환하는 적절한 명령이 부족합니다.

RETURN QUERY

해결책은 다음과 같이 RETURN QUERY 명령을 활용하는 것입니다. 수정된 기능:

CREATE OR REPLACE FUNCTION word_frequency(_max_tokens int)
  RETURNS TABLE (txt   text   -- also visible as OUT param in function body
               , cnt   bigint
               , ratio bigint)
  LANGUAGE plpgsql AS
$func$
BEGIN
   RETURN QUERY
   SELECT t.txt
        , count(*) AS cnt                 -- column alias only visible in this query
        , (count(*) * 100) / _max_tokens  -- I added parentheses
   FROM  (
      SELECT t.txt
      FROM   token t
      WHERE  t.chartype = 'ALPHABETIC'
      LIMIT  _max_tokens
      ) t
   GROUP  BY t.txt
   ORDER  BY cnt DESC;                    -- potential ambiguity 
END
$func$;

RETURN 사용 TABLE

RETURNS TABLE을 사용하여 반환 유형을 명시적으로 정의하면 다음과 같은 여러 가지 이점이 있습니다.

  • 각 함수 호출에서 열 정의 목록이 필요하지 않습니다.
  • 쿼리 반환과 일치하도록 OUT 매개변수의 데이터 유형을 지정할 수 있습니다. 값.

이름 지정 고려 사항

OUT 매개변수 이름을 지정할 때는 함수 본문 전체에 표시되므로 주의하세요. 충돌이나 혼동을 피하려면 동일한 이름을 가진 테이블 열을 정규화하거나 제안된 명명 모범 사례를 따르십시오.

대안

제공된 대체 쿼리는 상대적 점유율을 계산합니다. 토큰별:

CREATE OR REPLACE FUNCTION word_frequency(_max_tokens int)
  RETURNS TABLE (txt            text
               , abs_cnt        bigint
               , relative_share numeric)
  LANGUAGE plpgsql AS
$func$
BEGIN
   RETURN QUERY
   SELECT t.txt, t.cnt
        , round((t.cnt * 100) / (sum(t.cnt) OVER ()), 2)  -- AS relative_share
   FROM  (
      SELECT t.txt, count(*) AS cnt
      FROM   token t
      WHERE  t.chartype = 'ALPHABETIC'
      GROUP  BY t.txt
      ORDER  BY cnt DESC
      LIMIT  _max_tokens
      ) t
   ORDER  BY t.cnt DESC;
END
$func$;

이 버전은 창 기능을 사용하며 정확한 상대적 공유를 위한 수치 결과를 보장합니다. 계산.

위 내용은 PostgreSQL 함수에서 결과 세트를 효율적으로 반환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.