2017-06-01 34 views
-2

我有表存储问题每个问题有不同的答案,每个答案有不同的权重,现在我想计算排名,但我不现在怎么办this.please帮助我
我使用SQL服务器
我有该表中的每个存储答案和重量回答如何使用此数据在我的数据库中进行排序?

AdminQuesAns 
======================= 
Id  QuesId Ans  Value 
10  1000  Yes  10 
11  1000  somewhat 5 
12  1000  No   0 

10  1001  Yes  0 
12  1001  No   10 

,这表店顾客回答

AdminRank 
================================== 
Id  SDId QuesId AnsValue 
1  100  1000  10 
2  100  1001  0 
+0

使用该表格数据,预期的结果是什么? (请格式化好的文字。) – jarlh

+1

你使用的是什么rdms? (mysql,oracel,mssql) – Arion

+0

你如何计算等级(等式)? – Blasanka

回答

0

这是我会去了解它。

这有一个内部查询,它可以获得每个问题的最大值,然后外部查询将这些值与来自单个答案的值进行配对,在问题之间求和并计算一个作为另一个的百分比。

我也是由SDId分组,假设这是填写调查的人的ID。

SELECT 
    ar.SDId, 
    100 * cast(sum(ar.AnsValue) as numeric(5,2))/sum(mv.maxValue) as Rank 
FROM 
    AdminRank ar 
JOIN 
    (
    SELECT 
     qa.QuesId, 
     max(qa.Value) as maxValue 
    FROM 
     AdminQuesAns qa 
    GROUP BY 
     qa.QuesId 
    ) mv on ar.QuesId = mv.QuesId 
GROUP BY 
    ar.SDId 

根据您的数据类型,你可以删除cast部分。

1

您可以使用下面的查询。

Select SDId ,b.QuesId, 
((sum(a.AnsValue) *100)/(Select sum(c.value) 
from AdminQuesAns c where c.QuesId =b.QuesId))as'Rank' 
from AdminRank a join AdminQuesAns b on a.QuesId=b.QuesId and value=AnsValue 
group by SDId ,b.QuesId 
+0

@ user2983227请检查这是否适用于您,您可以相应地更改partition_by_clause和order_by_clause。 –

+0

我需要查询如:select(sum(AdminRank。 Ansvalue)* 100)/(select distinct sum(max(AdminQuesAns.Value)) – user2983227

+0

@ user2983227正如您已经标记它在SQL Server下,上面的答案应该可以满足你的目的。 –

相关问题