Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何计算过去X周数据的一列百分比?_Sql_Amazon Web Services_Amazon Redshift - Fatal编程技术网

Sql 如何计算过去X周数据的一列百分比?

Sql 如何计算过去X周数据的一列百分比?,sql,amazon-web-services,amazon-redshift,Sql,Amazon Web Services,Amazon Redshift,我有一个表,有以下列: week_number client_id status 以下是每列的含义: week_number has values like 'W1', 'W2' ... 'W53'. client_id has values with numbers in it. status has two values only 'accepted' and 'rejected'. 现在我需要每周做下面的计算,并得到过去6周(不包括本周)的百分比,以及每周分组 fi

我有一个表,有以下列:

week_number     client_id       status
以下是每列的含义:

week_number has values like 'W1', 'W2' ... 'W53'.
client_id has values with numbers in it.
status has two values only 'accepted' and 'rejected'.
现在我需要每周做下面的计算,并得到过去6周(不包括本周)的百分比,以及每周分组

find count of 'status' column which are 'accepted' for each week.
-------------------------------------------------------------------
find count of 'status' which are both 'accepted' and 'rejected' for each week.
所以我需要的输出应该是以下格式:

week_number     percentage
W1               5.1%
W53              15.9%
W52              2.5%
W51              11.0%
W50              13.6%
W49              19.4%
这有可能吗?我试过这样做,但这不起作用,而且我不想在这里使用
limit
子句来获取过去6周的数据。有没有什么方法可以在不使用任何限制条款的情况下有效地做到这一点

select
week_number,
((select count(status) from event_information where status in ('accepted')) / count(status)) * 100 as percentage
from event_information
group by 1
order by len(week_number) desc, week_number desc
limit 6;

您可以像这样使用聚合:

select week_number,
       avg(case when status = 'accepted' then 100.0 else 0 end) as accepted_ratio
from event_information
group by week_number
order by week_number desc
limit 6;
100.0
将获得一个介于0和100之间的值。我更喜欢0和1之间的比率(我会使用1.0)


请注意,“最近六周部分”是一个小字符串,因为您没有提到“年”列。根据您的评论,列中有一个真实的日期,因此您可以使用
orderbymin(client_date)desc
获得正确的订单。

您的周数不明确。你如何确定年份?年份将是我们正确的年份,根据过去6周的计算结果?那么数据中就没有W52了。这还没有发生。我需要过去的6周,所以本周是2,所以现在我们可以自动回到过去的6周,从本周计算可以是1,53,52,51,50,49?不或者我理解错了?我尝试了这个查询,但在过去的6周里,
accepted\u ratio
0。有什么想法吗?我刚刚意识到在
2021-01-18 00:00:00.0
格式中有一个名为
client\u date
的专栏,里面有日期。我们现在可以用这个来做这个吗?有没有关于我为什么得到0的想法?@AndyP。这很奇怪。Postgres将整数的平均值计算为十进制;我想红移也一样。只需将其转换为数字或浮点。我现在尝试了,但出现了一个错误,因为-
无法将布尔类型转换为数字。