Учти это:
SELECT
review.clicker_id,
sum(review.done - review.due) as timespent,
PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY timespent ASC) as median
FROM review WHERE monologue_id=7142 GROUP BY clicker_id ORDER BY timespent ASC;
Я пытаюсь получить медианное значение для sum(review.done - review.due)
(интервала времени). Но, очевидно, мне не разрешено делать это таким образом:
Ошибка в запросе: ОШИБКА: столбец "timespent" не существует LINE 4:
PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY time ASC) as m...
Как я должен это сделать?
time
, вероятно, не лучшая идея, поскольку это тип данных. - person wobr   schedule 17.01.2020time
вtimespent
, чтобы избежать путаницы. Но это не проблема здесь. - person Fabien Snauwaert   schedule 17.01.2020SELECT review.clicker_id, sum(review.done - review.due) as timespent, PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY sum(review.done - review.due) ASC) as median FROM review WHERE monologue_id=7142 GROUP BY clicker_id ORDER BY timespent ASC;
- person Jim Jones   schedule 17.01.2020GROUP BY 1 ORDER BY 2 ASC
будет работать так же, но в этом нет необходимости.) Теперь, если я попытаюсь заменить псевдоним внутриGROUP(ORDER BY timespent ASC)
номером столбца (2), все, что я получу для этот столбец представляет собой набор двоек, а не ожидаемую медиану. - person Fabien Snauwaert   schedule 17.01.2020WITH j AS ( SELECT review.clicker_id, sum(review.done - review.due) as timespent FROM review WHERE monologue_id=7142 ) SELECT clicker_id,timespent, PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY timespent ASC) as median FROM j WHERE GROUP BY clicker_id ORDER BY timespent ASC
- person Jim Jones   schedule 17.01.2020WITH totals AS (SELECT clicker_id,review.done - review.due AS timespent FROM review WHERE monologue_id = 7142) SELECT clicker_id,PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY timespent ASC) AS median FROM totals GROUP BY 1;
- person wobr   schedule 17.01.2020