我有下表,我正在尝试找到每个至少有2个或更多相同IID的IID,并找到统计数据的平均值。 MySQL语句如下: 选择计数(不同的IID)从rate计算; 但是我得到一个字段并且它表示15的数字,表格非常小并且只有20个元组。我被困住了,不能再这样了。
UID| IID | stats
-----------------
1 | 1 | 3
1 | 1 | 4
1 | 3 | 1
2 | 3 | 1
2 | 3 | 1
2 | 1 | 3
2 | 2 | 4
我希望看到的结果是 如果有两个或更多平均值,则按IID分组。我有一种感觉,我必须按照IID分组,并将统计数据除以计算数量。
IID | stats
-----------------
1 | 3.5
3 | 1.5
答案 0 :(得分:1)
如果您真的想要平均值,那么只需使用avg(stats)
即可。我无法看到如何使数字与你的输出相匹配,所以我想也许你想要一个不同的除数。
select sum(stats) / (count(distinct UID) * 1e) /* cast to float */
from rate
group by IID
having count(*) > 1
答案 1 :(得分:0)
这很可能是正确的。您的语句计算该列中不同值的数量。对于您的情况,您应该使用group by
和having
。
答案 2 :(得分:0)
为什么不使用group_by(IID)根据IID对数据进行分组,然后使用where子句。
答案 3 :(得分:0)
以下查询将返回包含多行的每个stats
的{{1}}的平均值:
iid
这似乎是一个合理的结果,但价值观将是:
select iid, avg(stats)
from table t
group by iid
having count(*) > 1;
我不确定您在问题中的结果是什么计算。