如何在sqlite或duckdb中计算所有行中子字符串的实例数?



我有一个简单的表。格式为:

Column 1: Integer
Column 2: String which consists of a bunch of words separated by spaces

第2列的例子可能是:"foo bar bax bux qux">

给定2行:

  • (1, "foo bar baz bux qux")
  • (2, "foo baz bux qux bax")

我想生成以下数据结构:

{
foo: 2,
baz: 2,
bux: 1,
qux: 2,
bax: 1
}

将会有成千上万的标签。

实际上,我想计算每个单词在所有行中出现的次数。做这件事的好方法是什么?

我可以使用sqlite或duckdb。

DuckDB的人给出了一个很棒的答案:

有两个函数可以解决这个问题!String_split和unnest。Unnest是一个特殊的函数,它接受列表并为每个元素创建单独的行。

With lists_split_into_rows as (
select 
col1,
unnest(string_split(col2, ' ')) as new_column
from my_table
)
Select 
new_column,
count(*) as my_count
from lists_split_into_rows
Group by
New_column

来源:https://github.com/duckdb/duckdb/issues/4169

最新更新