SQL 计数正则表达式匹配 (PostgresSQL)

SQL count regex matches (PostgreSQL)

我想计算 table 中的正则表达式实例。例如:

    message                    state
    ================================
    [foo] aaaa                 active
    [bar] aaaa                 idle
    [foo] bbbb                 idle
    [foo] cccc                 active
    [bar] dddd                 active
    [tar] eeee                 idle

我想要的是:

    messageType               ocurrences
    ====================================
    [foo]                             3
    [bar]                             2
    [tar]                             1

有什么办法吗? 任何帮助将不胜感激!

如果您只想计算邮件中的第一个 "word",则使用 substring_index():

select substring_index(message, ' ', 1) as messageType, count(*)
from table t
group by substring_index(message, ' ', 1)
order by count(*) desc;

编辑:

您可以在 Postgres 中查找第一个 space:

select left(message, position(' ' in message) as messageType, count(*)
from table t
group by messageType
order by count(*) desc;

就像上面的回复,但使用 Postgres 版本:

    select regexp_matches(message, '\[.+\]') as messageType, count (*)
    from table1
    group by regexp_matches(message, '\[.+\]')
    order by count (*) desc;