>

배열 필드가있는 모델이 있습니다. 이 필드에는 각 엔티티에 대한 단어가 포함되어 있습니다. 모델은 다음과 같습니다.

class Entity(models.Model):
    words = ArrayField(
        models.CharField(max_length=255, blank=True),
        null=True,
        blank=True
    )

이 모델의 모든 객체 목록을 모으고이 배열에서 가장 흔한 단어 100 개를 찾고 싶습니다. Postgresql 에서이 작업을 수행 할 수있는 방법이 있습니까? 아니면 효율적인 방법은 무엇입니까?


  • 답변 # 1

    근사값이 충분하고 테이블 통계가 상당히 정확한 경우 PostgreSQL에서 수집 한 배열 요소 통계를 사용하여 문제를 해결할 수 있습니다.

    테이블이 public.entity 라고 가정  속성은 words 입니다 이 쿼리는 원하는 결과를 생성합니다.

    SELECT mce.elem
    FROM pg_stats s
       CROSS JOIN LATERAL
          unnest(most_common_elems::text::text[],
                 most_common_elem_freqs) mce(elem, freq)
    WHERE s.schemaname = 'public'
      AND s.tablename = 'entity'
      AND s.attname = 'words'
      AND mce.elem IS NOT NULL
    ORDER BY mce.freq DESC
    LIMIT 100;
    
    

  • 이전 linux - 파이썬 사전에서 아래 출력을 포함하는 테이블을 어떻게 변환 할 수 있습니까?
  • 다음 java - 런타임 실행 결과가 표시되지 않습니다