查询选择查询的count(*)但仅返回查询结果OFFSET的LIMIT

时间:2013-10-05 11:23:44

标签: sql postgresql

我有一个SQL查询,它运行在多个表上以返回一些列,并使用LIMITOFFSET进行分页。

我还有第二个SQL查询,它与第一个查询完全相同,只是它返回上一个查询count(*)而没有 LIMIT和{{1运营商。

我可以在一个SQL语句中执行此操作吗?我可以根据自己的情况进行改进吗?

两个查询的示例:

  1. OFFSET
  2. SELECT a.col1, b.col4, c.col5 FROM a, b, c LIMIT 20 OFFSET 5

2 个答案:

答案 0 :(得分:3)

SELECT a.col1, 
       b.col4, 
       c.col5,
       count(*) over () as total_count
FROM a
  JOIN b ON ..
  JOIN c ON ...
LIMIT 20 OFFSET 5

请注意,我在三个表之间使用正确的连接替换了(最可能)不正确的FROM a, b, c

答案 1 :(得分:1)

with s as (
    select a.col1, b.col4, c.col5
    from a, b, c
), c as (
    select count(*) as c
    from s
)
select col1, col4, col5, (select c from c) as _count
from s
limit 20 offset 5