MySQL中分组计数后计算基因总体平均值的方法
计算基因计数的总体平均值
嘿,这个需求其实很好解决,我给你两种实用的方法,都能精准算出你要的总体平均值:
方法一:嵌套子查询(贴合你现有的分组逻辑)
如果你想基于已经实现的分组计数结果来计算平均值,可以用嵌套查询来完成:
SELECT AVG(gene_count) AS average_count FROM ( -- 这部分就是你之前写的分组计数逻辑,先得到每个基因的出现次数 SELECT COUNT(name2) AS gene_count FROM refGene GROUP BY name2 ) AS gene_counts;
这个逻辑和你手动计算的步骤完全一致:先统计每个基因的重复次数,再对这些次数取平均值。
方法二:更高效的直接计算法
其实还有个更省资源的写法,不需要嵌套子查询,直接用两个聚合函数就能搞定:
SELECT COUNT(name2) / COUNT(DISTINCT name2) AS average_count FROM refGene;
方法说明
COUNT(name2)会统计表中所有记录的总数(对应你例子里的6)COUNT(DISTINCT name2)会统计不重复的基因数量(对应你例子里的4)- 两者相除直接得到总次数除以基因数的平均值,只需要扫描一次表,性能更好。
用你给出的测试数据(COX2、COX2、BCL、BAX、BRO、BCL)测试的话,两种方法都会返回1.5,完全符合你的预期。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

