【发布时间】:2017-02-14 20:34:36
【问题描述】:
我有一个这样的数据表:
QuestionID UserName UserWeightingForQuestion AnswerGivenForQuestion Metric
1 A 1.50 1 ToBeCalculated
1 B 1.00 2 ToBeCalculated
1 C 1.80 3 ToBeCalculated
1 D 1.20 1 ToBeCalculated
1 E 1.40 2 ToBeCalculated
2 A 1.20 2 ToBeCalculated
2 B 1.20 2 ToBeCalculated
2 C 1.10 4 ToBeCalculated
2 D 1.20 5 ToBeCalculated
...
对于每个问题组,我想用如下所示定义的计算值填充Metric 列下的每个单元格:
Metric_For_User_A_For_QuestionID_X = SUM(Weights_With_The_Answer_Similar_To_What_Is_Given_By_User_A_In_QuestionID_Group = X) / DISTINCT(All_WEeights_In_One_QuestionID_Group = X)
具体来说,
Metric_For_User_A_For_QuestionID_1 = SUM(1.50+1.20)/(1.50+1.00+1.80+1.20+1.40)
Metric_For_User_B_For_QuestionID_1 = SUM(1.00+1.40)/(1.50+1.00+1.80+1.20+1.40)
Metric_For_User_C_For_QuestionID_1 = SUM(1.80)/(1.50+1.00+1.80+1.20+1.40)
Metric_For_User_D_For_QuestionID_1 = SUM(1.50+1.20)/(1.50+1.00+1.80+1.20+1.40)
Metric_For_User_E_For_QuestionID_1 = SUM(1.00+1.40)/(1.50+1.00+1.80+1.20+1.40)
对于 QuestionID group = 2,我想重复上述过程。例如,
Metric_For_User_A_For_QuestionID_2 = SUM(1.20+1.20)/(1.20+1.10)
我对 SQL 还很陌生,我相信可以使用 OVER 或某种聚合函数来实现这一点(?)如果这种计算在 SQL 中是可能的,有 SQL 专业知识的人可以建议我实现我想要计算的方法。
原始表有大约 70m 行,我使用的是 SQL Server。非常感谢您的建议和回答!
【问题讨论】:
-
你能解释一下这个逻辑吗?你想做什么对我来说没有任何意义。
-
@SeanLange 一个朋友要求我解决这个问题,所以我不确定他为什么要这样做(我问了他同样的问题)。我试图自己解决这个问题,但最终意识到,目前要高效地完成它已经超出了我的 SQL 能力。
标签: sql sql-server aggregate-functions aggregates