BigQuery:如何获取列中特定字段的值?

时间:2018-08-18 16:53:36

标签: sql google-bigquery bigdata

我有一个包含三列的表。我要 从每一列中提取特定字段 并添加它们。例如,我想添加2、33和111。

Table with 3 columns

BigQuery中这样做的有效/优化方法是什么?

谢谢。

2 个答案:

答案 0 :(得分:2)

一种选择是枢轴方法,如下所示:

SELECT
    MAX(CASE WHEN Row = 2 THEN S1 END) +
    MAX(CASE WHEN Row = 3 THEN S2 END) +
    MAX(CASE WHEN Row = 1 THEN S3 END) AS the_sum
FROM yourTable;

如果您实际上没有Row列,那么我们可以轻松地在CTE中使用其他列之一来生成一个以提供排序,例如

WITH cte AS (
    SELECT *,
        ROW_NUMBER() OVER (ORDER BY S1) Row
    FROM yourTable
)

然后,使用我上面给出的第一个查询,但以cte作为表,而不是yourTable

这是SQL Server中的一个演示,至少演示了基本的逻辑原理:

Demo

答案 1 :(得分:0)

我会这样写:

select sum(case when row = 1 then s3
                when row = 2 then s1
                when row = 3 then s2
           end)
from t;

我认为您可以比没有group by的聚合更优化。