Условно выбрать наиболее распространенное значение в массиве в PostgreSQL

У меня есть таблица (только одна строка) в моей базе данных PostgreSQL 9.5 с двумя столбцами, т. Е. Количество (bigint) и массив (текст).

count     array
6         "112,19.3,142,142,19.3,172,172,20.3,202,202,20.3,232,232,19.3,262,262,19.3,292"

Массив представляет собой шесть (таким образом, count = 6) наборов значений, т. е. Lower_limit, Value и Upper_limit. Теперь мне нужно условно изменить мой массив, т. Е. Когда верхний предел и нижний пределы совпадают, тогда выберите первый верхний предел и последний нижний предел и верните наиболее распространенное значение (равное 19,3) среди пределов. Мой желаемый результат будет выглядеть так:

count    array
1        112, 19.3, 292

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


person khajlk    schedule 09.06.2017    source источник


Ответы (1)


Я должен быть администратором - я не понимаю, как вы получаете count = 1, но ниже приведен пример того, как вы можете построить массив с первым, последним и наиболее распространенным значениями. Имейте в виду, что если бы было несколько наиболее распространенных значений, он бы непредсказуемо выбрал одно из них.

t=#
with a(r) as (values(array[112,19.3,142,142,19.3,172,172,20.3,202,202,20.3,232,232,19.3,262,262,19.3,292]))
, p as (select * from a,unnest(a.r) with ordinality)
, t as (
select count(1) over (partition by unnest)
, unnest u
, r[1] a
, r[array_length(r,1)] e
from p
order by unnest
limit 1
)
select array[a,u,e]
from t
;
     array
----------------
 {112,19.3,292}
(1 row)
person Vao Tsun    schedule 09.06.2017
comment
Счетчик представляет собой шесть наборов значений (нижнее, значение, верхнее), когда мы обновляем наш массив на основе совпадающих верхнего и нижнего пределов, тогда нельзя ли обновить счет на основе вывода? Например, ваш запрос вернул один набор. - person khajlk; 09.06.2017
comment
извините - не слежу - значит, счет будет 3?.. не один?.. не понял, почему у вас шесть на первом месте :) - person Vao Tsun; 09.06.2017
comment
Каждый счетчик должен содержать три значения. Так что, вероятно, мы можем подсчитать элементы массива и количество обновлений в последнем. Просто идея :) - person khajlk; 09.06.2017
comment
ах, хорошо, я думаю, теперь я понял - тогда мой ответ неверен :) - person Vao Tsun; 09.06.2017
comment
комбинация нижнего + значения + верхнего делает подсчет, и сколько значений у нас есть в массиве, должно быть подсчитано, и здесь идет обновление для подсчета :) Возможно, ваш ответ нуждается в обновлении. - person khajlk; 09.06.2017