我合并了三个表格进行分析:现役,学生和账单。
“活动中”的所有列均记录了所有活动中的学生及其所从事的学科:id(学生id)int,时间(他们处于活动状态的时间)时间戳,正确(如果他们正确解决了任务),和主题(活跃的主题)-文字
id time correct subject
1 2020-01-02 03:45:57 True Physics
2 2020-03-27 17:30:00 True Algebra
2 2020-03-27 17:28:05 True Algebra
2 2020-03-27 17:34:34 False Algebra
3 2020-03-27 17:32:08 True Russian
3 2020-03-27 18:01:01 True Russian
“学生”是包含以下内容的数据库:id(学生id)int,组(为a / b测试分配给学生的组)-文本
id group
1 B
2 A
3 B
4 B
5 A
6 B
7 A
“账单”记录学生购买的课程的所有交易:id(学生ID)int,sale_time(学生购买课程的时间)时间戳,主题(购买课程的主题)文本,钱(已支付的金额)。
>id sale_time subject money
1 2020-03-27 17:15:32 Algebra 8500
1 2020-03-27 07:56:43 Russian 5600
2 2020-03-21 00:00:00 Physics 4000
基本上,我们有一个学生数据库(学生),其中一些人购买了课程(账单)。虽然其中一些购买者保持活跃状态(Active)。
我需要编写一个单查询,从中可以提取以下分组(根据它们属于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;
,输出将复制某些id的“ money”值,以便在进行计算时考虑所有这些值。而且,我不知道如何在使用过滤器进行选择后立即全部进行这些数学计算。
请帮助!