gpt4 book ai didi

sql - 查找列数最少的行与模式匹配

转载 作者:行者123 更新时间:2023-11-29 14:38:11 24 4
gpt4 key购买 nike

我有一个类似下面的模式(只是一个例子):

CREATE TABLE example (
id int primary key
, text1 text
, text2 text
, text3 text
, text4 text
, text5 text
, text6 text
);

问题:

我正在尝试使用 ~* 运算符对 6 个文本列运行模式匹配搜索。我可以通过我的模式在 6 列中出现的次数来查询示例表吗?

例子:

我想在 6 个文本列中的至少 3 个中找到包含 said 关键字的所有行。这 6 列中的任何一列都无关紧要。

最佳答案

您可以通过如下简单的方式找到多个匹配项:

insert into example values (1, 'a', 'a', 'a', 'b', 'c', 'd');

select
id,
(text1 ~* 'a')::int+ (text2 ~* 'a')::int+
(text3 ~* 'a')::int+ (text4 ~* 'a')::int+
(text5 ~* 'a')::int+ (text6 ~* 'a')::int as matches
from example;

id | matches
----+---------
1 | 3

如果在这种情况下性能不是关键问题,您可以使用更方便但更慢的查询:

select id, sum((t ~* 'a')::int) as matches
from example,
lateral unnest(array[text1, text2, text3, text4, text5, text6]) as t
group by 1;

您可以在 WHERE(查询 #1)或 HAVING(查询 #2)子句中使用表达式:

select *
from example
where
(text1 ~* 'a')::int+ (text2 ~* 'a')::int+
(text3 ~* 'a')::int+ (text4 ~* 'a')::int+
(text5 ~* 'a')::int+ (text6 ~* 'a')::int > 3;

select e.*
from example e,
lateral unnest(array[text1, text2, text3, text4, text5, text6]) as t
group by e.id
having sum((t ~* 'a')::int) > 3;

关于sql - 查找列数最少的行与模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41091586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com