我想计算一个值在字符串中出现的次数

I want to count the number of occurences of a value in a string

给定一个列,即 a,它是 array_to_string(array(some_column)) 的结果,我如何计算其中值的出现次数?

假设我有 '1,2,3,3,4,5,6,3' 作为列的值。
如何获取值 '3' 的出现次数?

看来你需要使用 unnest.

试试这个:

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

为什么不创建一个 for 循环 () 并在 if/else 语句中递增一个变量 i 每当值 == 3

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

} }

类似的东西,希望你明白了。

我自己解决了。谢谢你的所有想法!

SELECT count(something)
FROM unnest(
        string_to_array(
            '1,2,3,3,4,5,6,3'
        , ',')
    ) something
WHERE something = '3'

Based on my "How do you count the occurrences of an anchored string using 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)