【问题标题】:Return rows which have values in multiple columns返回在多列中具有值的行
【发布时间】:2022-11-24 08:29:56
【问题描述】:

我有一个记录用户登录页面次数的表,但我试图过滤掉用户在一周内至少登录两次的地方

这是下表

User Monday Tuesday Wednesday Thursday Friday Total
A 1 3 4 6 1 15
B 0 0 20 0 0 20
C 18 1 0 18 1 38
D 0 2 0 0 0 2

这是我的预期输出

User Monday Tuesday Wednesday Thursday Friday Total
A 1 3 4 6 1 15
C 18 1 0 18 1 38

【问题讨论】:

  • 你是什​​么意思过滤掉...你显示的是至少有 2 天的登录时间。您的意思是只显示至少登录了 2 天的用户吗?

标签: sql google-bigquery


【解决方案1】:

使用 where 子句 case 表达式计算每一天的值 > 0,然后求和 >=2。每一天都必须根据自己的优点进行评估,所以我们不能做简单的数学运算和除法之类的事情。让我们独立评估每一天。

SELECT * 
FROM TABLENAME
WHERE case when Monday > 0  then 1 else 0 end 
    + case when Tuesday > 0 then 1 else 0 end  
    + case when Wednesday > 0 then 1 else 0 end 
    + case when Thrusday > 0 then 1 else 0 end 
    + case when Friday > 0 then 1 else 0 end >=2

【讨论】:

    【解决方案2】:

    我会建议以下方法

    select * from your_table t
    where array_length(regexp_extract_all(to_json_string(t), ':0')) < 2                  
    

    如果应用于您问题中的样本数据 - 输出是

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 2013-05-18
      相关资源
      最近更新 更多