计算每个元素 SQL

Calculate for each element SQL

我需要对我的数据集执行一个简单的计算:

refalt
 AA
 AT
 AC
 ...

我使用这个 SQL 语句来检索我的信息:

select 
refalt,
count(*) as Total,
((
select 
count(*)
from ft_variant
where refalt IN ('AC','AT', 'AA')
)::numeric --Number of times that a couple is in
/
(
select count(*) 
from ft_variant
))as Frequency --Divided by total umber of elements
from ft_variant
group by refalt;

除了一件事,我的成绩还不错:

   Refalt       Total   Frequency
    AC          131682  0.12
    AT          149385  0.12
    AA          55841   0.12

频率仅指AA,我想计算每对夫妇的频率。

结果应该是:

   Refalt       Total   Frequency
    AC          131682  0.20
    AT          149385  0.68
    AA          55841   0.12

有点不对劲,我想不通。

你把事情搞得太复杂了:

select refalt, 
       count(*) as total, 
       count(*)::numeric / (select count(*) from ft_variant) as frequency
from ft_variant
group by refalt

如果您想将其限制为 'AC','AT', 'AA',您可以将其添加到 where 子句中。

您正在计算 'AC' + 'AT' + 'AA' 在 table 中的百分比。你想计算你显示的一个 refalt 的百分比。

可能:

select 
  refalt,
  count(*) as total,
  count(*)::numeric / sum(count(*)) over () as frequency
from ft_variant
where refalt in ('AC', 'AT', 'AA')
group by refalt;

这只会查看 'AC'、'AT' 和 'AA' 记录,并为您提供每次 refalt 的计数及其在该组中的百分比。