【问题标题】:PostgreSQL - Query keyword patterns in columns in tablePostgreSQL - 查询表中列中的关键字模式
【发布时间】:2019-11-26 21:03:09
【问题描述】:

我们都知道在 SQL 中,我们可以通过这样的查询来查询一个列(比如说,列“breeds”)来查找某个单词,例如“dog”:

select breeds
from myStackOverflowDBTable
where breeds = 'dog'

但是,假设我有更多的列和更多的数据,比如数百万条记录,我不想找到一个词,而是最常见的关键字模式或通配符表达式,这样的查询:

SELECT * 
FROM myStackOverflowDBTable
WHERE address LIKE '%alb%'"

有没有一种有效的方法可以使用 SQL 在列中找到这些“模式”?我需要找到最常见的子字符串,根据上面的查询,说通配符字符串“alb”出现在“位置”列中,其中包含奥尔巴尼、阿尔伯克基、阿拉巴马州等词,显然是直接查询这些词会产生 0 个结果,但查询该通配符关键字模式会产生很多结果,但是 我想为给定的列找到最重复或最频繁的通配符/关键字模式/正则表达式/子字符串(但是你想定义它) - 有没有一种简单的方法可以做到这一点,而无需查询一百万个测试查询并手动进行???

【问题讨论】:

  • 您有指定的模式列表吗?或者您想通过在列中找到的值来计算模式?

标签: sql postgresql design-patterns substring


【解决方案1】:

好吧,如果你想找到三个字符模式,你可以提取所有的三个字符模式,聚合和计数:

select substr(t.address, gs.i, 3) as ngram_3, count(*)
from t cross join lateral
     generate_series(1, length(address) - 3, 1) gs(i)
group by ngram_3
order by count(*) desc
limit 100;

【讨论】:

  • 谢谢。我将以此为基础来测试和试验不同的查询模式,再次感谢您!
猜你喜欢
  • 2015-01-12
  • 2018-05-15
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
相关资源
最近更新 更多