首页 > 解决方案 > BigQuery/Google Studio 问题:BigQuery 查询中相当复杂的数学运算

问题描述

我正在为我的社区开发一个 covid 仪表板: Chestertown 响应 我的挑战是计算 7 天移动平均线并在 Google Studios 页面上显示该信息。

我已经设法通过 Bigquery 使用以下代码进行计算(尽管它可能不像可能那样有效——抱歉):

--声明一些变量。声明 ConfirmedCases 数字;声明 DateOfAverage 日期时间;声明 mvgAvg 数值;声明 caseDiff 数字;声明乘数;

--get/set ConfirmedCases = (select covid.confirmed_cases FROM
bigquery-public-data.covid19_usafacts.summaryAS covid WHERE
County_fips_code = '24029' ORDER BY date DESC limit 1);

--获取/设置最新日期。设置 DateOfAverage =(从 bigquery-public-data.covid19_usafacts.summarycovid WHERE
County_fips_code = '24029' ORDER BY date DESC limit 1 中选择日期);--get/set 7 天平均设置 mvgAVG = (select avg(Covid.confirmed_cases) over(order by Covid.confirmed_cases asc ROWS 7 PRECEDING) FROM
bigquery-public-data.covid19_usafacts.summaryAS covid WHERE
County_fips_code = '24029' ORDER BY date DESC limit 1);
--计算实际值和平均值之间的差异。设置 caseDiff = (select avg(Covid.confirmed_cases) over(按 Covid.confirmed_cases asc ROWS 7 PRECEDING 排序) - covid.Confirmed_cases from bigquery-public-data.covid19_usafacts.summaryAS covid WHERE
County_fips_code = '24029' ORDER BY date DESC limit 1); -- 设置乘数 set multiplier = 100;

——做最后的数学。选择 caseDiff / ConfirmedCases * multiplier 作为结果;

我的问题: 认识到我有很多东西要学,并且在这个查询中肯定要清理一些东西,但是我在 Bigquery 中得到的结果是正确的,但我得到了:

最终的“查看结果”是我想要的答案。我怎样才能让这段代码只产生答案(类似于简单地从((表))运行选择((答案))。

标签: sqlgoogle-bigquery

解决方案


您定义OVER标准的方式是错误的。以下内容应该可以帮助您更正确地对齐它。分区基本上是您希望如何分离数据以确定平均值,在您的情况下是县。并且您想要对ORDER BY与您的用例(过去 7 天)一致的内容进行排序( )。因此,我们对 desc 进行排序以获取订单列表,以便查询可以提取最后 7 行,这些行将对应于最后 7 天。

另一方面,我认为有一个数据集具有每日增量,因此您不必对您在此查询中所做的事情做任何事情。

select *
, AVG(confirmed_cases) OVER (
        PARTITION BY county_fips_code 
        ORDER BY date desc ROWS 7 PRECEDING
    ) as svn_day_del_avg
from `bigquery-public-data.covid19_usafacts.summary`
where county_fips_code = '24029'
order by date desc

推荐阅读