2017-06-01 33 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下,上面的答案應該可以滿足你的目的。 –

相關問題