Google 大查询:如何过滤输出以仅显示至少具有 1 个非零值的行?

Google Big Query: how to filter output to show only rows that have at least 1 non-zero value?

我正在处理如下所示的数据集:

作为此查询的结果:

SELECT "campaign_1" campaign_name, 0 clicks, 5 impressions, 1000 cost UNION ALL
SELECT "campaign_2", 1, 5, 0 UNION ALL
SELECT "campaign_3", 0, 0, 0

我的目标是显示此 table 中至少有 1 个非零值的所有行。换句话说,我想要的输出是:

为了解决我自己的问题,我尝试使用一个包含每一列名称的大 WHERE 子句,并按以下格式列出每一列:WHERE column_1 != 0 AND column_2 != 0 ...。这没有用,因为它也消除了前 2 行,因为它们也包含 0。

我在 Whosebug 上搜索了这个问题的现有答案,虽然我找到了 Mikhail Berlyant 对类似问题的解决方案 here,但这个特定的解决方案不适用于这种情况。因此,我将其发布为一个新问题。

提前感谢您分享您的知识和帮助!

如果值不能为负数或 null(如示例数据所示),您可以:

where column_1 + column_2 + ... > 0

或者您可以使用 greatest():

where greatest(column_1, column_2, ...) > 0

在这种情况下,您是否可以在所有条件之间使用 OR 运算符。在那种情况下,您仍然会在保留 1 和 2 的同时消除 campaign_3。

WHERE column_1 != 0 OR column_2 != 0 ....但是 GMB 概述的内容似乎更简单并且更不容易出错。

如果出于某种原因您想重复使用您在问题中引用的 post 的解决方案 - 您可以使用下面的变体

#standardSQL
SELECT *
FROM `project.dataset.table` t
WHERE REGEXP_CONTAINS(TO_JSON_STRING(t), r':[^0][,}]')  

带输出(如果适用于您问题中的样本数据)

使用此解决方案的潜在好处是,如果您有超过 3-5 个 columns/metrics - 在这种情况下,您不需要在查询中显式调用它们

另请注意:以上假设广告系列的名称有多个字符