【发布时间】:2020-09-17 10:09:45
【问题描述】:
我需要合并三个表以进行分析:活动、学生和账单。
“活跃”包含活跃学生的记录和他们活跃的科目,列:id(学生 id)int、时间(他们活跃的时间)时间戳和主题(活跃的主题)-文本
id time subject
1 2020-04-23 06:53:30 Math
2 2020-05-13 09:51:22 Physics
2 2020-02-26 17:34:56 History
'Students' 是海量数据库,包含:id (student id) int, group(学生被分配到 a/b 测试的组)- text
id group
1 A
2 B
3 A
4 A
“账单”记录学生购买的课程的所有交易:id(学生 ID)int、sale_time(学生购买课程的时间)时间戳、主题(购买课程的主题)文本、金钱(支付的金额)。
id sale_time subject money
1 2020-03-04 08:54:55 Math 4300
1 2020-04-08 20:43:56 Math 3200
2 2020-05-09 13:43:12 Law 8900
基本上,我们有一个学生数据库(学生),其中一些购买了课程(账单)。而一些购买的人仍然活跃(活跃)。
我需要编写一个单一的查询,我可以提取以下按它们属于 A 组还是 B 组分组:
average revenue per user: sum (money) / count (distinct Students.id)
average revenue per active user: sum (money) / count (distinct Active.id)
conversion rate (%): count (distinct Bills.id) / count (distinct Students.id)
conversion rate (active) (%): count (distinct Bills.id) / count (distinct Active.id)
conversion rate (Math) (%) (count (distinct Bills.id) where Bills.subject = Math) / (count (distinct Active.id) where Active.subject = Math)
所有这些都在一个查询中!
我用过
select sum (money)/count (distinct Students.id)
from Students
left join Bills using (id)
left join Active using (id)
group by group, Students.id
但我不知道如何在使用过滤器选择后立即进行这些数学计算。
请帮忙!
【问题讨论】:
标签: sql postgresql