【问题标题】:Getting count even when empty table is returned in SQL即使在 SQL 中返回空表时也得到计数
【发布时间】:2017-10-16 02:43:36
【问题描述】:

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

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    为什么不先计数,然后再进行分页?

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      相关资源
      最近更新 更多