我在postgresql数据库中有关于学生mooc表现的数据。我正在努力咀嚼的数据,以便我可以使用它在一个营销漏斗类型分析。我们的想法是看看这些阶段之间的转变:有多少学生报名,有多少人开课,有多少人参加了一半以上的小测验,有多少人在所有的小测验中获得了90%以上的成绩。
问题是,学生注册课程多次,所以他们被数到多次,这使得数字是错误的。
下面是一些示例数据
|row | course | student | percent_progress | percent_points |
|====|============|=========|==================|================|
| 01 | Regression | Ken | 0.467 | 0.455 |
| 02 | Regression | Ken | (null) | (null) |
| 03 | Regression | Ken | (null) | (null) |
| 04 | Regression | Ryu | 0.455 | 0.446 |
| 05 | Regression | Ryu | 0.455 | 0.459 |
| 06 | Clustering | Ryu | (null) | (null) |
| 07 | Regression | Guile | 0.182 | 0.054 |
| 08 | Regression | Guile | 0.182 | 0.054 |
|====|============|=========|==================|================|
如果我要手动浏览这些数据,我会为每个人选择“最佳”课程,其中“最佳”是指每个人的课程值最高的课程 percent_progress
以及 percent_points
. 如果值为 (null)
,那就意味着他们没有开始上课。
以下是我面临的几个问题: Ken
因为他参加了 Regression
三次,但只试过一次。保存
row 01
. Ryu
因为他试图 Regression
两次都一样 percent_progress
两次都是,但都得到了更多的分数
row 05
. 这个案子让我很恼火,因为我必须比较两列。尽管如此,我们还是希望
row 05
对于ryu和
row 06
因为它来自不同的班级: Clustering
. Guile
是直接复制品。
上表的输出为:
|row | course | student | percent_progress | percent_points |
|====|============|=========|==================|================|
| 01 | Regression | Ken | 0.467 | 0.455 |
| 05 | Regression | Ryu | 0.455 | 0.459 |
| 06 | Clustering | Ryu | (null) | (null) |
| 07 | Regression | Guile | 0.182 | 0.054 |
|====|============|=========|==================|================|
有几个不同的条件,我需要检查,我甚至不知道从哪里开始。有人建议使用 rank()
函数,我试过了,但我做错了,因为它不是按分组的 course
以及 student
,然后根据两个性能列进行排名。我也不知道该怎么处理这样的案子 Ryu's
他在那里打了一条领带 percent_progress
我们必须使用 percent_points
. (还有其他情况与此相反,所以任何硬编码规则,说只是使用 percent_points
不起作用。
非常感谢您的帮助。
1条答案
按热度按时间8oomwypt1#
你可以用
distinct on
:如果您喜欢使用这两个值的总和,可以很容易地进行调整: