1

我有一个 SQL 查询,它在多个表上运行以返回一些列和用途LIMIT以及OFFSET用于分页。

我还有第二个 SQL 查询,它与第一个查询完全相同,只是它返回没有and运算符count(*)的前一个查询的。LIMITOFFSET

我可以在一个 SQL 语句中执行此操作吗?我可以改进我所拥有的吗?

两个查询的示例:

  1. SELECT a.col1, b.col4, c.col5 FROM a, b, c LIMIT 20 OFFSET 5
  2. SELECT count(*) FROM (SELECT a.col1, b.col4, c.col5 FROM a, b, c) t
4

2 回答 2

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三个表之间的正确连接替换了(很可能)不正确的。

于 2013-10-05T11:37:48.527 回答
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
于 2013-10-05T11:41:16.597 回答