Я хочу подсчитать количество вхождений значения в строку

Учитывая столбец, а именно a, который является результатом array_to_string(array(some_column)), как мне подсчитать появление значения из него?

Скажем, у меня есть '1,2,3,3,4,5,6,3' в качестве значения столбца.
Как получить количество вхождений для значения '3'?


person Kevin    schedule 28.04.2015    source источник
comment
если a является результатом array_to_string(array(some_column)), почему бы не просто count(CASE WHEN some_column=3 THEN 1 END)   -  person Evan Carroll    schedule 10.03.2017


Ответы (4)


Я решил это сам. Спасибо за все идеи!

SELECT count(something)
FROM unnest(
        string_to_array(
            '1,2,3,3,4,5,6,3'
        , ',')
    ) something
WHERE something = '3'
person Kevin    schedule 28.04.2015
comment
Это также должен быть принятый ответ, так как он лучше. - person Erwin Brandstetter; 28.04.2015

Кажется, вам нужно использовать unnest.

Попробуй это:

select idTable, (select sum(case x when '3' then 1 else 0 end) 
from unnest(a) as dt(x)) as counts 
from yourTable;
person bpinhosilva    schedule 28.04.2015

почему бы просто не создать цикл for() и не увеличить переменную i в операторе if/else всякий раз, когда значение == 3

for(var i =0; i<intArray.length;i++){
     if(int[i] = 3){
     var j += 1;

} }

что-то вроде этого, надеюсь, вы поняли идею.

person CodeArt    schedule 28.04.2015
comment
Этот ответ кажется неуместным. Процедурный подход не подходит для решения на основе наборов в SQL. - person Erwin Brandstetter; 28.04.2015

На основе моего "Как вы подсчитываете количество вхождений привязанной строки с помощью PostgreSQL?"

Это самый быстрый способ подсчета вхождений в подстроку.

SELECT length(data) - length(replace(data, '3', ''))
  / length('3')
FROM foo;

Если вы создаете строку с array_to_string, имеет смысл использовать unnest, но это не будет быстрее. Кроме того, я хотел бы увидеть полный запрос.

count(CASE WHEN some_column=3 THEN 1 END)

звучит быстрее всего, или если вы обновитесь до новой версии PostgreSQL..

count(*) FILTER (WHEN some_column=3)
person Evan Carroll    schedule 10.03.2017