如何在bigquery中查找满足特定条件的每个不同值的百分比?

问题描述 投票:0回答:1

共有三列:ID、日期、睡眠时间。我想找出每个 ID 睡眠超过 7 小时的天数百分比。例如,ID“10”有 15 天/行的数据。其中 7 行的“睡眠时间”少于 7 小时,8 行的“睡眠时间”超过 7 小时。我希望输出是一个表格,其中显示所有 ID 的 ID:10,百分比:53.33%。

我尝试做 CASE WHEN Sleeptimerhrs >= 7 或 COUNT(DISTINCT IF(sleeptimehrs >=7))

我知道这些是非常不正确的,所以我正在寻找一些有关如何执行此查询的指导。

sql google-bigquery
1个回答
0
投票

使用派生表根据百分比计算所需的天数进行计数,然后呈现该计算结果:

SELECT
      ID
    , sleep7 * 100.0 / alldays * 1.0 AS percentage
FROM (
    SELECT
          ID
        , count(CASE WHEN Sleeptimerhrs >= 7 THEN 1 END) AS sleep7
        , count(*) AS alldays
    FROM table1
    GROUP BY
          ID
    ) derived

nb 聚合函数(例如 count)会忽略 NULL,因此使用的 case 表达式 只需在满足条件时返回非空值即可。

© www.soinside.com 2019 - 2024. All rights reserved.