> 데이터 베이스 > MySQL 튜토리얼 > PostgreSQL에서 그룹 A 활동에 이어 그룹 B의 다음 활동을 찾는 방법은 무엇입니까?

PostgreSQL에서 그룹 A 활동에 이어 그룹 B의 다음 활동을 찾는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-01 07:17:08
원래의
1006명이 탐색했습니다.

How to Find the Next Activity of Group B Following Group A Activities in PostgreSQL?

PostgreSQL의 조건부 선도/지연 함수

그룹 B에 속한 사용자가 수행한 다음 활동을 식별하려고 합니다. 그룹 A의 활동을 완료했습니다. 기본적으로 각 활동에 대해 그룹 B의 첫 번째 후속 활동을 찾아야 합니다. user.

한 가지 접근 방식은 조건부 창 기능을 활용하는 것입니다. 그러나 PostgreSQL에서 FILTER 절은 창 함수 내의 집계 함수에만 적용할 수 있으며, Lead() 또는 lag()와 같은 핵심 창 함수에는 적용할 수 없습니다.

따라서 실행 가능한 솔루션은 DISTINCT ON 구문을 사용하는 것입니다. CASE 및 창 함수와 함께:

SELECT name
     , CASE WHEN a2 LIKE 'B%' THEN a1 ELSE a2 END AS activity
     , CASE WHEN a2 LIKE 'B%' THEN a2 END AS next_activity
FROM  (
   SELECT DISTINCT ON (name)
          name
        , lead(activity) OVER (PARTITION BY name ORDER BY time DESC) AS a1
        , activity AS a2
   FROM   t
   WHERE (activity LIKE 'A%' OR activity LIKE 'B%')
   ORDER  BY name, time DESC
   ) sub;
로그인 후 복사

이 쿼리는 하위 쿼리를 사용합니다. 대상:

  1. DISTINCT ON(이름)을 사용하여 각 사용자에 대해 그룹 A의 최신 활동(a1)을 식별합니다.
  2. lead()를 적용하여 다음 활동(a2)을 얻습니다.
  3. CASE 및 LIKE 'B%'를 활용하여 그룹에 속하는 다음 활동을 감지하고 할당합니다. B.

또는 사용자당 행 수가 제한된 소규모 데이터 세트의 경우 다음 쿼리를 사용할 수 있습니다.

SELECT name
     , activity AS a1
     , lead(activity) OVER (PARTITION BY name ORDER BY time DESC) AS next_activity
FROM   t
WHERE (activity LIKE 'A%' OR activity LIKE 'B%')
ORDER  BY name, time DESC;
로그인 후 복사

이 쿼리는 다음을 직접 검색하여 논리를 단순화합니다. 소속 그룹에 관계없이 그룹 A 활동 및 후속 활동을 검색합니다.

위 내용은 PostgreSQL에서 그룹 A 활동에 이어 그룹 B의 다음 활동을 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿