Как выбрать среднее значение (Медиана) из списка любого количества выражений - PullRequest
1 голос
/ 11 марта 2020

Я пишу запрос в PostgreSQL, в котором мне нужно выбрать среднее значение из 3 временных меток, которые я передаю. Я знаю, что есть наименьшая и самая большая функция, доступная в PostgreSQL, которая позволяет мне выбирать наименьшее и наибольшее число соответственно.

Но в моей постановке задачи мне нужно выбрать среднее значение и хотеть знать простой и эффективный способ сделать это?

Запрос:

select 
    scvt.vc_id, 
    least(start_time1,start_time2,start_time3) as "actual_class_start_time", -- <- the middle value of start times
from ...

Мне нужно выбрать среднее значение в выделенном тексте, есть ли эффективный способ?

1 Ответ

1 голос
/ 11 марта 2020

Если это ровно три значения каждый раз, вы можете сделать пользовательскую функцию, которая выбирает середину из трех:

CREATE OR REPLACE FUNCTION middleval(anyelement, anyelement, anyelement)
   RETURNS date AS
$$
  SELECT d
  FROM (VALUES ($1), ($2), ($3)) AS t (d)
  order by 1
  offset 1
  limit 1;
$$
LANGUAGE 'sql' IMMUTABLE;

Тогда ваш код будет выглядеть так:

select scvt.vc_id, middleval (start_time1, start_time2, start_time3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...