相关疑难解决方法(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万
查看次数

优化GROUP BY查询以检索每个用户的最新记录

我在Postgres 9.2中有下表(简化形式)

CREATE TABLE log (
    log_date DATE,
    user_id  INTEGER,
    payload  INTEGER
);
Run Code Online (Sandbox Code Playgroud)

它每个用户和每天最多包含一条记录.每天将有大约500,000条记录,为期300天.每个用户的running_total总是在增加.

我想在特定日期之前有效地检索每个用户的最新记录.我的查询是:

SELECT user_id, max(log_date), max(payload) 
FROM log 
WHERE log_date <= :mydate 
GROUP BY user_id
Run Code Online (Sandbox Code Playgroud)

这非常慢.我也尝试过:

SELECT DISTINCT ON(user_id), log_date, payload
FROM log
WHERE log_date <= :mydate
ORDER BY user_id, log_date DESC;
Run Code Online (Sandbox Code Playgroud)

具有相同的计划,同样缓慢.

到目前为止,我在user_msg_log(aggr_date)上有一个索引,但没有多大帮助.我应该用什么其他索引来加快速度,还是以任何其他方式实现我的目标?

sql postgresql indexing greatest-n-per-group postgresql-performance

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

消除PostgreSQL SELECT语句中的重复行

这是我的查询:

SELECT autor.entwickler,anwendung.name
  FROM autor 
  left join anwendung
    on anwendung.name = autor.anwendung;

 entwickler |    name     
------------+-------------
 Benutzer 1 | Anwendung 1
 Benutzer 2 | Anwendung 1
 Benutzer 2 | Anwendung 2
 Benutzer 1 | Anwendung 3
 Benutzer 1 | Anwendung 4
 Benutzer 2 | Anwendung 4
(6 rows)
Run Code Online (Sandbox Code Playgroud)

我想为字段中的每个不同值保留一行name,并丢弃其他如下:

 entwickler |    name     
------------+-------------
 Benutzer 1 | Anwendung 1
 Benutzer 2 | Anwendung 2
 Benutzer 1 | Anwendung 3
 Benutzer 1 | Anwendung 4
Run Code Online (Sandbox Code Playgroud)

在MySQL中,我会这样做:

SELECT autor.entwickler,anwendung.name
  FROM autor …
Run Code Online (Sandbox Code Playgroud)

mysql sql postgresql select duplicates

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