即使在sql中返回空表也要计数

时间:2017-10-16 02:43:37

标签: sql database postgresql database-design

我正在尝试使用一些限制和偏移来查询数据库以及一些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子句匹配的内容,它将始终返回一个结果。但是没有额外的查询可以做到吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

评论太长了。

在进行分页之前,为什么不先计算计数

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

然后,您可以将此计数用于其余的分页。

这也将保存查询本身中full_count的计算。因此,首先进行计数的开销会抵消查询中的开销。