我正在竞赛网站上工作,有两种类型的用户,普通网站成员和评委.每个人都可以使用拖放工具按照他们选择的顺序对特定比赛中的条目进行排序.完成后,相关的条目ID将附加一个排名值,然后可用于确定比赛中哪个条目获得最高的平均分数.获胜者实际上将通过平均每组的平均值来确定.
我希望做的是最终得到一个表格,显示特定比赛中的每个条目,标题,然后显示3个值,该条目的avg_normal,该条目的avg_judge,然后将这两个值相加并除以2 ,所以avg_normal和avg_judge每个帐户占avg_all的50%.最后,通过avg_all对表进行排序.
avg_all =((avg_normal avg_judge)/ 2)
他们按顺序订购entry_ids 1,2,3,4,5.排名值从零开始,因此:
entry_id, entry_ranking, author_id
1, 0, 1
2, 1, 1
3, 2, 1
4, 3, 1
5, 4, 1
我希望能够确定1-100的平均值,所以排名为0 = 100分,1 = 90,2 = 80,3 = 70,以及4以上= 5分
每个用户都附加到另一个表中的组,因此他们是普通用户或法官
我希望能够编写一个查找的查询
1.)普通用户投票得分
2.)JUDGE用户平均投票得分
3.)NORMAL和&的平均值. JUDGE SCORE.
所以普通用户平均值= 93.3333,法官平均值= 70,总平均值= 81.66665
感谢下面的答案,两个查询都像冠军一样.
解决方法:
请注意以下事项:
>我假设成员中有一个字段user_type存储’NORMAL’或’JUDGE’
>我已经删除了titles.title的数据和组的连接,因为我看不出它们与你的平均值有什么关系.
.
SELECT
t.title,
AVG(CASE WHEN user_type = 'NORMAL' THEN IF (r.ranking_value = '0', 100, 0) + IF (r.ranking_value = '1', 90, 0) + IF (r.ranking_value = '2', 80, 0) + IF (r.ranking_value = '3', 70, 0) + IF (r.ranking_value = '4', 5, 0) END) AS avg_normal,
AVG(CASE WHEN user_type = 'JUDGE' THEN IF (r.ranking_value = '0', 100, 0) + IF (r.ranking_value = '1', 90, 0) + IF (r.ranking_value = '2', 80, 0) + IF (r.ranking_value = '3', 70, 0) + IF (r.ranking_value = '4', 5, 0) END) AS avg_judge,
(AVG(CASE WHEN user_type = 'NORMAL' THEN IF (r.ranking_value = '0', 100, 0) + IF (r.ranking_value = '1', 90, 0) + IF (r.ranking_value = '2', 80, 0) + IF (r.ranking_value = '3', 70, 0) + IF (r.ranking_value = '4', 5, 0) END) +
AVG(CASE WHEN user_type = 'JUDGE' THEN IF (r.ranking_value = '0', 100, 0) + IF (r.ranking_value = '1', 90, 0) + IF (r.ranking_value = '2', 80, 0) + IF (r.ranking_value = '3', 70, 0) + IF (r.ranking_value = '4', 5, 0) END)) / 2 AS avg_all
FROM rankings r
LEFT JOIN titles t
ON r.entry_id = t.entry_id
LEFT JOIN members m
ON t.author_id = m.member_id
WHERE r.contest_id IN ('CONTEST ID NUMBER')
GROUP BY
t.title
ORDER BY
avg_all;