BigQuery如何获得每月的总数?
Posted
技术标签:
【中文标题】BigQuery如何获得每月的总数?【英文标题】:BigQuery how to get total count per month? 【发布时间】:2021-12-23 14:27:57 【问题描述】:我想获取当前或去年每月的总计数,我该怎么做?我尝试从 CURRENT_DATE 变量中提取月份或年份,但没有成功。
我不知道我应该使用 date_trunc 还是 extract。我总是遇到语法错误。我使用 BigQuery 中没有遗留的标准 SQL 语法。
SELECT
COUNT (*)
FROM
`mytable`
extract(month from current_date) as grpmonth
WHERE
test = 12
GROUP BY grpmonth
我想要这样的东西:
2020 Count
----------
Jan 1125
Feb 3308
...
Dec 2043
2021 Count
-----------
Jan 544
Feb 107
...
Dec 232
我遇到的一些错误:
Syntax error: Expected end of input but got keyword EXTRACT at
【问题讨论】:
将提取(从 current_date 开始的月份)作为 grpmonth 移动到 count() 之后,?虽然你没有向我们展示你想要什么,我只是在猜测 我编辑了我的帖子,以便您可以看到我想要的内容 你的标题是按月计算的,但你想要的输出是按年和月计算的.. 【参考方案1】:获取当前或去年每月的总计数
考虑以下方法
select
extract(year from date_col) year,
extract(month from date_col) month,
count(*) total
from your_table
where extract(year from date_col) > extract(year from current_date) - 2
group by year, month
【讨论】:
嘿,我尝试了你的建议。我只得到一个以第 12 个月作为结果和计数的行,但我也希望结果中的其他月份作为单独的行。在这种情况下 date_col 是什么,因为我不使用它?date_col
是您的表 (your_table
) 中包含日期的任何列。我的答案中的查询每个月/年返回一行!如果您按原样使用该查询 - 这就是您应该得到的。除非您使用额外的 where 子句仅在第 12 个月过滤!如果仍然无法正常工作 - 请参阅 [如何创建最小、完整和可验证的示例。](***.com/help/mcve)【参考方案2】:
您编写了错误的 SQL 语法。您应该将摘录放在选择部分。
SELECT
extract(year from _date) as _year,
extract(month from _date) as _month,
data_source.result
from
UNNEST(GENERATE_DATE_ARRAY('2020-01-01', '2021-12-01', INTERVAL 1 MONTH)) as _date
left join (
SELECT
COUNT (*) as result,
extract(month from current_date) as grpmonth,
extract(year from current_date) as grpyear
FROM
`mytable`
WHERE
test = 12
GROUP BY grpmonth, grpyear
) as data_source on grpyear = extract(year from _date) and _month = extract(month from _date)
您可以自行更改年份范围。
【讨论】:
谢谢,现在错误消失了,但我仍然没有得到预期的结果。现在我得到了 12 个月的总数,如下所示: f0_ : 123123 grpmonth: 12 我想要每月 我更新了答案。你可以试试看。 您好,我尝试了您的建议。似乎我不承认 _year 和 _month 作为最后一行的变量。我收到以下错误:无法识别的名称:_year;你说的是grpyear吗?在 [19:31 哦,是的,我更正了 SQL 语法以上是关于BigQuery如何获得每月的总数?的主要内容,如果未能解决你的问题,请参考以下文章
从 BigQuery 中的时间戳数据类型中获取每月前 3 个标签数量
使用 Apache Beam 向 BigQuery 传播插入时如何指定 insertId
在 BigQuery 中,您将如何使用两个日期列计算每月和每日总计?