Sql 如何按列值计数按周分组计算百分比?

Sql 如何按列值计数按周分组计算百分比?,sql,pivot,amazon-redshift,average,aggregate-functions,Sql,Pivot,Amazon Redshift,Average,Aggregate Functions,我有这样一个表视图: week ColB ColF --------------------- 45 1234 PART 45 8215 TEMP 45 2834 PART 45 4152 PART 45 5775 TEMP 45 6527 PART 45 1162 TEMP 45 9154 45 2162 46 4232

我有这样一个表视图:

week    ColB    ColF
---------------------
45      1234    PART
45      8215    TEMP
45      2834    PART
45      4152    PART
45      5775    TEMP
45      6527    PART
45      1162    TEMP
45      9154    
45      2162    
46      4232    PART
46      3215    PART
46      5834    PART
46      6152    PART
46      7775    TEMP
46      8527    PART
46      9162    TEMP
46      2354    
46      2562    
46      9762    
...
...
...
现在,每周我都需要做以下事情:

  • 每周总共有多少个
    PART
    TEMP
    。让我们称之为总计。在
    ColF
    中,除了
    PART
    TEMP
    之外,我还可以有其他值,比如空字符串或任何其他值。我只需要数数零件和温度
  • 每周有多少名
    TEMP
    。让我们称之为
    temp
  • 每周,将
    temp
    /
    total
    除以,得到百分比
所以输出应该是这样的。基本上按周列分组

week    ratio
---------------------
45      5.5%
46      4.3%
47      2.3%
48      1.7%
我是这样尝试的,但不知怎么的,我并不完全理解如何达到上述效果?我下面的问题是错误的-

select week, (SELECT week, count(*) FROM process WHERE ColF = 'TEMP' group by week) / count(*)
from process where ColF IN ('PART', 'TEMP')
group by week
order by week

有可能做到这一点吗?

您可以使用条件聚合
avg()
便于计算比率:

select week, avg(case when colf = 'TEMP' then 100.0 else 0 end) as ratio
from process 
where colf in ('PART', 'TEMP')
group by week

我看不出您在上述查询中使用的是
avg
?还是我误解了?@AndyP:对不起,错别字修正了。