相关疑难解决方法(0)

快速发现PostgreSQL中表的行数

我需要知道表中的行数来计算百分比.如果总计数大于某个预定义常量,我将使用常量值.否则,我将使用实际的行数.

我可以用SELECT count(*) FROM table.但是如果我的常量值是500,000并且我的表中有5,000,000,000行,那么计算所有行会浪费很多时间.

一旦超过常数值,是否可以停止计数?

只要它低于给定的限制,我只需要确切的行数.否则,如果计数高于限制,我会使用限制值,并希望尽快得到答案.

像这样的东西:

SELECT text,count(*), percentual_calculus()  
FROM token  
GROUP BY text  
ORDER BY count DESC;
Run Code Online (Sandbox Code Playgroud)

sql postgresql row count

89
推荐指数
3
解决办法
7万
查看次数

在应用LIMIT之前获得结果计数的最佳方法

分页来自数据库的数据时,您需要知道将有多少页面呈现页面跳转控件.

目前我通过运行查询两次,一次包装count()以确定总结果,第二次应用限制以获取当前页面所需的结果.

这似乎效率低下.有没有更好的方法来确定在LIMIT应用之前会返回多少结果?

我正在使用PHP和Postgres.

php sql postgresql window-functions sql-limit

58
推荐指数
2
解决办法
3万
查看次数

SELECT*FROM有快捷方式吗?

psql控制台中有许多有用的快捷方式,如\d\l.
我想知道有一个SELECT * FROM table_name吗?
我经常将这个查询用于学习目的,所以不必一直写select * from ....

sql postgresql syntax psql

11
推荐指数
1
解决办法
3061
查看次数

在单个查询中获取分页行和总计数

核心需求:查找指定过滤条件, ,
的最新条目。可能有更多这样的过滤器,但无论如何,按提交日期返回最新的逻辑是相同的。有两个主要用途,一是在 UI 中分页查看,二是生成报告。person_idsubmission_datetypeplanstatus

WITH cte AS (
  SELECT * FROM (
    SELECT my_table.*, rank() OVER (PARTITION BY person_id ORDER BY submission_date DESC, last_updated DESC, id DESC) FROM my_table
    )  rank_filter 
      WHERE RANK=1 AND status in ('ACCEPTED','CORRECTED') AND type != 'CR' AND h_plan_id IN (10000, 20000)
)
SELECT
SELECT count(id) FROM cte group by id,
SELECT * FROM cte limit 10 offset 0;
Run Code Online (Sandbox Code Playgroud)

该方法group by也不适用于 CTE。计数查询中所有的联合null可能适用于组合,但不确定。

我想将这两个合并为1个查询的主要原因是因为表很大并且窗口函数很昂贵。目前我使用单独的查询,它们基本上都运行相同的查询两次。

Postgres 版本 12。 …

sql postgresql common-table-expression window-functions

5
推荐指数
1
解决办法
8293
查看次数