You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL同类子查询除法计算访问占比的简化实现方案

你可以使用PostgreSQL的条件聚合语法实现需求,仅需一次表扫描即可完成所有计算,没有冗余逻辑,代码可读性和执行效率都更高:

SELECT 
  COUNT(*) FILTER (WHERE source = 'Netflix') * 100.0 / COUNT(*) AS visitors_percentage
FROM visits.visitors_log
WHERE (day AT TIME ZONE 'PST')::DATE = '2019-12-22';

逻辑说明

  1. 首先在WHERE子句完成时区转换和日期过滤:先将day字段转换为PST时区,再筛选出日期为2019-12-22的所有记录,一步完成时区转换步骤,过滤后的结果集仅包含目标日的所有访问数据。
  2. 用COUNT(*)直接统计目标日总访问量。
  3. 用COUNT(*) FILTER (WHERE source = 'Netflix')带条件统计来源为Netflix的访问量,不需要额外嵌套子查询。
  4. 两个计数结果直接相除得到占比,乘以100.0是为了避免整数除法得到错误结果。

如果你需要兼容不支持FILTER语法的低版本PostgreSQL,也可以用CASE表达式替代:

SELECT 
  SUM(CASE WHEN source = 'Netflix' THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS visitors_percentage
FROM visits.visitors_log
WHERE (day AT TIME ZONE 'PST')::DATE = '2019-12-22';

内容的提问来源于stack exchange,提问作者alphaomega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:54:03