mysql 平均值 排序_MySQL按平均两个平均值排序

我正在竞赛网站上工作,有两种类型的用户,普通网站成员和评委.每个人都可以使用拖放工具按照他们选择的顺序对特定比赛中的条目进行排序.完成后,相关的条目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;

标签:mysql,sorting,sql,average

来源: https://codeday.me/bug/20190701/1343576.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值