我的表如下所示:
examID action timeSinceStart
a write 300
a answer 2535
b answer 3834
a answer 2900
c write 774
d edit 3674
c answer 3489
a edit 3983
c answer 300
我寻求以下输出:
examID averageTime
a 2717.5
b 3834
c 1894.5
也就是说,我只看actions
那些answer
,我只写了examID
一次又一次的专栏average time since start at the point of answering
。
是否可以直接执行此操作而无需创建总和列和计数列,然后编写平均公式?
我的“复杂”方法不起作用:
%%bigquery df_average_times
SELECT countTimes.examID, sumTimes.answerSum, countTimes.answerCount, (sumTimes/countTimes) as averageTime
FROM
( SELECT examID, timeSinceStart, action, SUM(*) as answerSum
FROM `some-database.bq.results`
GROUP BY examID, timeSinceStart, action
HAVING action='answer'
ORDER BY examID) as sumTimes
INNER JOIN
( SELECT examID, timeSinceStart, action, COUNT(*) as answerCount
FROM `some-database.bq.results`
GROUP BY examID, timeSinceStart, action
HAVING event='answer'
ORDER BY examID) as countTimes
ON falseAnswers.questionId = trueAnswers.questionId
错误指出:
ERROR:
400 Argument * can only be used in COUNT(*) at [3:58]