我正在尝试使用一些限制和偏移来查询数据库以及一些WHERE子句。我还需要与WHERE
子句匹配的总行数。
我在postgresql中使用过“count OVER”,如下所示:
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子句匹配的内容,它将始终返回一个结果。但是没有额外的查询可以做到吗?
提前致谢。
答案 0 :(得分:1)
评论太长了。
在进行分页之前,为什么不先计算计数?
SELECT count(*) as full_count
FROM user_info
WHERE user_info.user_id = ANY(unlocked_ids);
然后,您可以将此计数用于其余的分页。
这也将保存查询本身中full_count
的计算。因此,首先进行计数的开销会抵消查询中的开销。