簡體   English   中英

MySQL按平均兩個平均值排序

[英]MySQL sort by average of two averages

我正在競賽網站上工作,有兩種類型的用戶,普通網站成員和評委。 每個人都可以使用拖放工具按照他們選擇的順序對特定比賽中的條目進行排序。 完成后,相關的條目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;

所有這些更改都包裝了原始查詢,lines314159具有大部分工作

SELECT aa.title,aa.avg_normal,aa.avg_judge,(aa.avg_normal + aa.avg_judge) / 2 AS avg_all
from 
(
SELECT
t.title, 
AVG(CASE WHEN group_id = '6' 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 group_id = '7' 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
FROM exp_rankings r
LEFT JOIN exp_weblog_titles t
  ON r.entry_id = t.entry_id
LEFT JOIN exp_members m
  ON t.author_id = m.member_id
WHERE r.contest_id IN ('22')
GROUP BY
  t.title
ORDER BY
 avg_all) as aa;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM