WITH
eligibleUsers AS (SELECT userID FROM `logs.reviews` JOIN `logs.latestEssaysCards` USING (cardID) WHERE essayName="qcvc" GROUP BY userID HAVING COUNT(DISTINCT cardID) = 112),
reviews AS (SELECT *, RANK() OVER (PARTITION BY userID, cardID ORDER BY timestamp) AS reviewNumber FROM `logs.reviews` JOIN eligibleUsers USING (userID) JOIN (SELECT essayName, cardID FROM `logs.latestEssaysCards`) USING (cardID) WHERE essayName="qcvc"),
byUser AS (SELECT userID, COUNTIF(reviewMarking="remembered")/COUNT(*) AS accuracy, TIMESTAMP_DIFF(MAX(timestamp), MIN(timestamp), MINUTE) AS readingTime, COUNT(*) AS N FROM reviews WHERE reviewNumber = 1 GROUP BY userID)
SELECT APPROX_QUANTILES(accuracy, 10), APPROX_QUANTILES(readingTime, 10) FROM byUser