sql - 我怎样才能更快地进行此查询?(postgreSQL)
问题描述
目标 - 第 1 天滚动留存率(百分比)
问题:
1)我怎样才能加快这个查询?
2)这个对数字的对话是减慢查询?
3)我还有其他选项可以以其他方式舍入()吗?还是最佳?
询问:
SELECT date(reg_time), round(CAST(count(DISTINCT du.uid) / count(DISTINCT users.uid)::float * 100 AS numeric), 2) AS rolling_retention_day1
FROM users
LEFT JOIN dailyusers du
ON users.uid = du.uid
AND date(reg_time) BETWEEN current_date - interval '30' DAY AND current_date
AND date(reg_time) + 1 <= day
GROUP BY date(reg_time);
解决方案
使用正确的索引,我怀疑这会更快:
SELECT reg_date, AVG(du_flag) as rolling_retention_day1
FROM (SELECT date(u.reg_time) as reg_date,
(CASE WHEN EXISTS (SELECT 1
FROM dailyusers du
WHERE du.uid = u.uid AND
date(u.reg_time) + 1 <= du.day
)
THEN 1 ELSE 0
END) as du_flag
FROM users u
WHERE u.reg_time >= current_date - interval '30' day AND
u.reg_time < current_date + interval '1' day
)
GROUP BY reg_date;
你想要索引users(reg_time)
和dailyusers(uid, day)
。这假设uid
是唯一的users
,这对我来说很有意义。
如果您真的关心平均值的格式,那么您可以这样做:
AVG(du_flag)::decimal(4, 2)
这是我对您给出的查询所能做的最好的事情。可能有更好的方法来编写查询。如果您需要帮助,我建议您使用示例数据、所需结果以及查询正在做什么(或应该做什么)的解释提出另一个问题。
推荐阅读
- javascript - 从子设置父状态(对象)会导致不断重新渲染
- python - 阴影后调用内置函数
- django - Django INSTALLED_APPS 无法正确获取带有下划线的应用程序 - 为什么?
- django - Django 表单初始化覆盖“选择一个有效的选择”表单验证错误
- python - Rust:逐个字符打印出字符串
- html - 在链接上出现 404 错误,但代码看起来正确
- python - ValueError:没有为对象类型命名数据的轴
我执行了下面的代码并返回错误。谁能帮我解决这个错误?非常感谢!!我需要读取一个 .xlsx 文件并对为其他列分组的列“Valor”求和并导出到 .txt。文件。
文件 .xlsx 的数据:
ios - 如何操作 UITableView 以根据标题编辑单元格?
- javascript - 开发智能 JavaScript 下拉菜单
- angular - 调用 this.store.dispatch(new Login({ authToken: user.accessToken })) Angular 8 时如何更新减速器状态