我需要知道表中的行数来计算百分比.如果总计数大于某个预定义常量,我将使用常量值.否则,我将使用实际的行数.
我可以用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) 分页来自数据库的数据时,您需要知道将有多少页面呈现页面跳转控件.
目前我通过运行查询两次,一次包装count()
以确定总结果,第二次应用限制以获取当前页面所需的结果.
这似乎效率低下.有没有更好的方法来确定在LIMIT
应用之前会返回多少结果?
我正在使用PHP和Postgres.
我在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
这是我的查询:
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) postgresql ×4
sql ×4
count ×1
duplicates ×1
indexing ×1
mysql ×1
php ×1
row ×1
select ×1
sql-limit ×1