【问题标题】:MySQL get average from result, average must be between 8 and 12MySQL 从结果中获取平均值,平均值必须在 8 到 12 之间
【发布时间】:2015-03-28 00:38:52
【问题描述】:

所以我试图创建一个 MySQL 查询来获取 RANK id 的平均值,它必须介于 8 到 12 之间,否则查询将选择 5 个随机玩家名称,直到 RANKVALUE 平均在 8 到 12 之间。

select summonername 
from (select rankvalue from 
players group by summonername 
having count(rankvalue) = 5 
order by rand())
group by summonername
having avg(rankvalue) between 8 and 12

tid  PLAYER NAME   RANKVALUE
1   summonername2   5
1   Summoner 1      22
1   Summoner 2      10
1   Summoner 3      14
1   Summoner 4      10
1   Summoner 2      21
1   test            21
1   yop             13
1   summonername6   12
1   summonername7   16
1   summonername8   5
1   summonername9   13
1   summonername10  21
1   summonername11  1
1   summonername12  9

【问题讨论】:

  • 为什么 MySQL 问题的 sql-server 标记?答案可能会因您使用的不同而有所不同。

标签: mysql sql sql-server average


【解决方案1】:

使用Group byHaving 子句

SELECT `summonername`, AVG(rankvalue)
FROM `players` 
Where tid=1 
group by summonername
Having AVG(rankvalue) between 8 and 12
ORDER BY rand() LIMIT 5

【讨论】:

  • ORDER BY RAND() 对于大型结果集来说非常慢。我不经常使用HAVING,但它似乎也可能很慢。
  • 没有得到需要的结果。它只选择排名值在 8 到 12 之间的人。我正在尝试将 5 个人分组,并从中获得排名值平均值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多