2017-10-16 5 views
0

일부 WHERE 절과 함께 페이지 매김에 대한 일부 제한 및 오프셋을 사용하여 db를 쿼리하려고합니다. 또한 WHERE 절과 일치하는 총 행 수가 필요합니다. 나는이 같은 PostgreSQL의에서 "OVER 계산"사용했다빈 테이블이 SQL에서 반환 될 때 카운트 받기

:

SELECT 
    user_id, 
    created_on, 
    COUNT(user_id) OVER() AS full_count 
FROM 
    user_info 
WHERE 
    user_info.user_id = ANY(unlocked_ids) 
ORDER BY 
    created_on DESC 
LIMIT p_limit OFFSET p_offset 

지금은 나에게이 일치하는 행의 수를 반환 WHERE 마지막 열에서 절. 오프셋이 너무 높으면 예상대로 빈 테이블을 반환합니다. 하지만 오프셋이 너무 높을 때도 매치 행 수가 항상 필요합니다.

현재 내가 시도한 솔루션은 LIMIT 1과 오프셋 0이있는 WHERE 절과 일치하는 항목이있는 경우 항상 하나의 결과를 반환하는 다른 쿼리를 만드는 것입니다. 그러나 추가 쿼리없이이 작업을 수행 할 수 있습니까?

미리 감사드립니다.

답변

1

댓글이 너무 깁니다.

번호 매기기를 수행하기 전에 첫 번째로 번을 가져 오지 않는 이유는 무엇입니까?

SELECT count(*) as full_count 
FROM user_info 
WHERE user_info.user_id = ANY(unlocked_ids); 

나머지 페이지 매김에는이 개수를 사용할 수 있습니다.

이렇게하면 쿼리 자체에 full_count의 계산이 저장됩니다. 따라서 계산을 수행하는 오버 헤드가 먼저 쿼리의 오버 헤드를 상쇄합니다.

관련 문제