如何在BigQuery中计算各ID睡眠时长超7小时的天数占比
BigQuery 计算各ID睡眠时长超7小时天数占比的正确查询方法
场景1:每条记录对应唯一日期(无重复日期)
直接对原始数据分组计算,用AVG()结合CASE WHEN快速得到占比:
SELECT ID, FORMAT('%.2f%%', AVG(CASE WHEN sleeptimehrs > 7 THEN 1 ELSE 0 END) * 100) AS sleep_over_7_pct FROM `你的项目ID.你的数据集ID.sleep_data` -- 替换为你的实际表路径 GROUP BY ID;
场景2:同一ID存在同一天多条记录(需去重统计天数)
先通过CTE聚合出每个ID每天的睡眠时长(这里用MAX()取当日最长睡眠,可根据需求替换为AVG()等),再计算占比:
WITH daily_sleep_summary AS ( SELECT ID, date, MAX(sleeptimehrs) AS daily_sleep_hrs -- 按需求调整聚合逻辑 FROM `你的项目ID.你的数据集ID.sleep_data` GROUP BY ID, date ) SELECT ID, FORMAT('%.2f%%', AVG(CASE WHEN daily_sleep_hrs > 7 THEN 1 ELSE 0 END) * 100) AS sleep_over_7_pct FROM daily_sleep_summary GROUP BY ID;
关键逻辑说明
CASE WHEN sleeptimehrs > 7 THEN 1 ELSE 0 END:将符合条件的记录标记为1,不符合的标记为0AVG()计算标记值的平均值,乘以100后就是百分比数值FORMAT('%.2f%%', ...):把数值格式化为保留两位小数的百分比字符串(如53.33%)
内容的提问来源于stack exchange,提问作者Rayby
相关产品推荐
相关产品推荐

