2016-06-13 2 views
0

Как получить median из val столбца из таблицы test, значение которого больше 20.запроса для медианы с сазом

id  val 
1   5.43 
2   106.26 
3   14.00 
4   39.58 
5   27.00 

В этом случае выходе будет медианой (27,00, 39,58, 106,26) = 39,58.

Я использую базу данных PostgreSQL. Любая помощь будет высоко оценена.

ответ

0

С PostgreSQL 9.4 используется ordered aggregates:

postgres=# SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY val) 
       FROM foo WHERE val > 20; 
┌─────────────────┐ 
│ percentile_cont │ 
╞═════════════════╡ 
│   39.58 │ 
└─────────────────┘ 
(1 row) 

или некоторые действительно современный синтаксис:

postgres=# SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY val) 
             FILTER (WHERE val > 20) 
       FROM foo; 
┌─────────────────┐ 
│ percentile_cont │ 
╞═════════════════╡ 
│   39.58 │ 
└─────────────────┘ 
(1 row) 
+0

Спасибо за ваш комментарий. Можем ли мы написать запрос, используя предложение case, а не where. Причина, почему я спрашиваю об этом: для некоторого набора значений мне нужно выполнить 'SUM' и для некоторого набора значений' AVG' и 'MEDIAN'. –

+0

Я не заметил ключевое слово 'FILTER', которое вы использовали во втором запросе, я думаю, что он будет работать отлично. Еще раз спасибо. –

Смежные вопросы