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;
我想计算 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;