나는 "페이지 뷰"가 아닌 "방문자"를 계산하기 visitor_id
위해 page_views
테이블을 기준 으로 그룹화하려고합니다 .
내 스키마는
id
visitor_id
country_code
created_at
다음 쿼리 종류는 작동하지만 동일한에 여러 레코드가있는 minute
경우 해당 분 동안 카운트는 1보다 크지 만 다른 분은 존재하지 않습니다.visitor_id
select DISTINCT ON (visitor_id)
FLOOR(EXTRACT(epoch from created_at) / 60)
- FLOOR(extract(epoch from now() at time zone 'utc') / 60)
as minutes,
count(DISTINCT visitor_id) as count
from page_views
group by visitor_id, minutes;
업데이트 : 다음은 몇 가지 샘플 데이터 및 예상 결과입니다.
+----+------------+-------------+
| id | visitor_id | created_at |
+----+------------+-------------+
| 1 | 1 | 1571520145 |
| 2 | 1 | 1571520085 |
| 3 | 3 | 1571520085 |
+----+------------+-------------+
이것은 기본적으로 각 다른 분에 대해 1 카운트를 반환하므로 "분"에 관계없이 각 고유 방문자 만 효과적으로 계산합니다.
page_views 테이블에있는 visitor_id별로 그룹화하여 "페이지보기"가 아닌 "방문자"를 계산하려고합니다.
특정 기간 동안 고유 한 방문자를 원하는 것으로 해석하려고합니다. 이것이 정확히 말하는 것은 아니지만 쿼리와 더 일치합니다.
그렇다면에 visitor_id
속하지 않습니다 GROUP BY
.
select (FLOOR(EXTRACT(epoch from created_at) / 60) -
FLOOR(extract(epoch from now() at time zone 'utc') / 60)
) as minutes,
count(DISTINCT visitor_id) as count
from page_views
group by minutes
order by minutes;
누군가가 처음 방문했을 때만 계산하려면 하위 쿼리를 사용하세요.
select (FLOOR(EXTRACT(epoch from created_at) / 60) -
FLOOR(extract(epoch from now() at time zone 'utc') / 60)
) as minutes,
count(DISTINCT visitor_id) as count
from (select visitor_id, min(created_at as created_at
from page_views
group by visitor_id
) v
group by minutes
order by minutes;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다