我有一个简单的表。格式为:
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