【发布时间】:2021-10-31 12:07:24
【问题描述】:
我在 PostgreSQL 13 中有一个看起来像这样的表(为了这个问题而修改):
SELECT * FROM visits.visitors_log;
visitor_id | day | source
--------------+------------------------+----------
9 | 2019-12-30 12:10:10-05 | Twitter
7 | 2019-12-14 22:10:26-04 | Netflix
5 | 2019-12-13 15:21:04-05 | Netflix
9 | 2019-12-22 23:34:47-05 | Twitter
7 | 2019-12-22 00:10:26-04 | Netflix
9 | 2019-12-22 13:20:42-04 | Twitter
将时间转换为另一个时区后,我想计算 2019 年 12 月 22 日来自特定来源的访问百分比。
涉及 4 个步骤:
- 转换时区
- 计算当天发生的总访问次数
- 计算当天发生的来自源 Netflix 的总访问次数
- 将这两个数字相除以获得百分比。
我编写了这段代码,它有效,但似乎重复且不是很干净:
SELECT (SELECT COUNT(*) FROM (SELECT visitor_id, source, day AT TIME ZONE 'PST' FROM visits.visitors_log WHERE day::date = '2019-12-22') AS a
WHERE day::date = '2019-12-22' AND source = 'Netflix') * 100.0
/
(SELECT COUNT(*) FROM (SELECT visitor_id, source, day AT TIME ZONE 'PST' FROM visits.visitors_log WHERE day::date = '2019-12-22') AS b
WHERE day::date = '2019-12-22')
AS visitors_percentage;
谁能提出一个更简洁的方法来回答这个问题?
【问题讨论】:
标签: sql postgresql subquery aggregate-functions postgresql-13