如何在一个查询中进行许多计算

时间:2020-09-18 12:46:13

标签: sql postgresql

我合并了三个表格进行分析:现役,学生和账单。

“活动中”的所有列均记录了所有活动中的学生及其所从事的学科: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”值,以便在进行计算时考虑所有这些值。而且,我不知道如何在使用过滤器进行选择后立即全部进行这些数学计算。

请帮助!

0 个答案:

没有答案
相关问题