MySQL Count(Distinct)返回一个值

时间:2015-02-28 18:56:39

标签: mysql

我有下表,我正在尝试找到每个至少有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

4 个答案:

答案 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 byhaving

答案 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;

我不确定您在问题中的结果是什么计算。