从BigQuery表标准SQL计算百分比

时间:2018-08-28 13:43:36

标签: sql google-bigquery

| eta   | arrived    | 
+-------+------------+
| 06:47 |    07:00   | 
| 08:30 |    08:20   | 
| 10:30 |    10:38   | 
+-------+------------+

如果有一个如上所述的表格,我想计算到达时间中有多少到达时间,例如,第一个和第三个到达时间在eta时间之内,但第二个不在eta时间之内,所以我想计算百分比,或者说3分之2准时。我将如何在Bigquery Standard SQL中做到这一点?

3 个答案:

答案 0 :(得分:2)

一种方法是:

select avg(case when arrived < eta then 1.0 else 0 end) as ratio_on_time
from t;

如果您实际上想要0到100之间的数字,则可以使用100.0

答案 1 :(得分:1)

计算符合条件的行数,然后除以总数:

SELECT
  100 * COUNTIF(arrived < eta) / COUNT(*) AS percent_on_time
FROM dataset.table

由于我的理解是您要检查到达时间是否比预计到达时间短,所以我扭转了条件。

答案 2 :(得分:1)

  

我想...说“三分之二的时间准时”

还有另一个“选项”

#standardSQL
SELECT FORMAT('Out of %i, %i were on time', COUNT(1), COUNTIF(arrived < eta)) summary
FROM `project.dataset.table`  

如果要在您的问题中应用于虚拟数据-结果为:

Row summary  
1   Out of 3, 1 were on time