Google bigquery Bigquery-如何计算两个连续行的总和
我怎样才能得到两行的总和?例如,如果我总共有5行,我应该得到3行 以下是我的表格:Google bigquery Bigquery-如何计算两个连续行的总和,google-bigquery,Google Bigquery,我怎样才能得到两行的总和?例如,如果我总共有5行,我应该得到3行 以下是我的表格: 2020-08-01 1 2020-08-02 3 2020-08-03 4 2020-08-04 2 2020-08-05 4 我想做到这一点: 4 6 4 您可以在此处使用ROW\u NUMBER: WITH cte AS ( SELECT dt, val, ROW_NUMBER() OVER (ORDER BY dt) rn FROM yourTable ) SELECT SUM(v
2020-08-01 1
2020-08-02 3
2020-08-03 4
2020-08-04 2
2020-08-05 4
我想做到这一点:
4
6
4
您可以在此处使用
ROW\u NUMBER
:
WITH cte AS (
SELECT dt, val, ROW_NUMBER() OVER (ORDER BY dt) rn
FROM yourTable
)
SELECT SUM(val)
FROM cte
GROUP BY FLOOR((rn - 1) / 2)
GROUP BY MIN(dt);
下面是一个演示链接,显示在SQL Server中,但其逻辑也适用于BigQuery:
您可以在此处使用
行号
:
WITH cte AS (
SELECT dt, val, ROW_NUMBER() OVER (ORDER BY dt) rn
FROM yourTable
)
SELECT SUM(val)
FROM cte
GROUP BY FLOOR((rn - 1) / 2)
GROUP BY MIN(dt);
下面是一个演示链接,显示在SQL Server中,但其逻辑也适用于BigQuery:
下面是Bigquery标准SQL
#standardSQL
SELECT SUM(value) AS value,
STRING_AGG(FORMAT_DATE('%B %d', day), ' and ') || ' = ' || CAST(SUM(value) AS STRING) AS calc
FROM (
SELECT day, value, DIV(ROW_NUMBER() OVER(ORDER BY day) - 1, 2) grp
FROM `project.dataset.table` t
)
GROUP BY grp
ORDER BY grp
您可以使用问题中的样本数据测试、播放上述内容,如下例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT DATE '2020-08-01' day, 1 value UNION ALL
SELECT '2020-08-02', 3 UNION ALL
SELECT '2020-08-03', 4 UNION ALL
SELECT '2020-08-04', 2 UNION ALL
SELECT '2020-08-05', 4
)
SELECT SUM(value) AS value,
STRING_AGG(FORMAT_DATE('%B %d', day), ' and ') || ' = ' || CAST(SUM(value) AS STRING) AS calc
FROM (
SELECT day, value, DIV(ROW_NUMBER() OVER(ORDER BY day) - 1, 2) grp
FROM `project.dataset.table` t
)
GROUP BY grp
ORDER BY grp
有输出
Row value calc
1 4 August 01 and August 02 = 4
2 6 August 03 and August 04 = 6
3 4 August 05 = 4
下面是Bigquery标准SQL
#standardSQL
SELECT SUM(value) AS value,
STRING_AGG(FORMAT_DATE('%B %d', day), ' and ') || ' = ' || CAST(SUM(value) AS STRING) AS calc
FROM (
SELECT day, value, DIV(ROW_NUMBER() OVER(ORDER BY day) - 1, 2) grp
FROM `project.dataset.table` t
)
GROUP BY grp
ORDER BY grp
您可以使用问题中的样本数据测试、播放上述内容,如下例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT DATE '2020-08-01' day, 1 value UNION ALL
SELECT '2020-08-02', 3 UNION ALL
SELECT '2020-08-03', 4 UNION ALL
SELECT '2020-08-04', 2 UNION ALL
SELECT '2020-08-05', 4
)
SELECT SUM(value) AS value,
STRING_AGG(FORMAT_DATE('%B %d', day), ' and ') || ' = ' || CAST(SUM(value) AS STRING) AS calc
FROM (
SELECT day, value, DIV(ROW_NUMBER() OVER(ORDER BY day) - 1, 2) grp
FROM `project.dataset.table` t
)
GROUP BY grp
ORDER BY grp
有输出
Row value calc
1 4 August 01 and August 02 = 4
2 6 August 03 and August 04 = 6
3 4 August 05 = 4
谢谢你的快速回复。没有在bigquery@Tim中工作。给相同的5行赋值。i、 e.1 3 4 24@ShivamChauhan我怀疑这可能发生。尝试按我在上面使用的表达式的楼层进行聚合。这应该可以解决大查询中的问题。感谢您的快速响应。没有在bigquery@Tim中工作。给相同的5行赋值。i、 e.1 3 4 24@ShivamChauhan我怀疑这可能发生。尝试按我在上面使用的表达式的楼层进行聚合。这应该可以解决大查询中的问题。