共有三列:ID、日期、睡眠时间。我想找出每个 ID 睡眠超过 7 小时的天数百分比。例如,ID“10”有 15 天/行的数据。其中 7 行的“睡眠时间”少于 7 小时,8 行的“睡眠时间”超过 7 小时。我希望输出是一个表格,其中显示所有 ID 的 ID:10,百分比:53.33%。
我尝试做 CASE WHEN Sleeptimerhrs >= 7 或 COUNT(DISTINCT IF(sleeptimehrs >=7))
我知道这些是非常不正确的,所以我正在寻找一些有关如何执行此查询的指导。
使用派生表根据百分比计算所需的天数进行计数,然后呈现该计算结果:
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 表达式 只需在满足条件时返回非空值即可。