【问题标题】:Counting the number of times a word appears in a column in oracle计算一个单词在oracle中的列中出现的次数
【发布时间】:2014-07-12 07:18:24
【问题描述】:

我有一个包含 20000 条记录的数据库。我希望我的代码计算哪些记录共享其“标题”值中的第一个单词。 到目前为止,这是我的代码,它返回 1000 条记录(我认为不可能将 1000 个单词作为记录的第一个单词共享,每个计数约为 20)

我需要做些什么来计算第一个单词被共享多少次作为第一个单词? (如在 记录 1:标题:“Bob Joe 去废话” 记录 2:标题:“鲍勃反击” 记录 3:标题:“乔和鲍勃回家”

它会返回,因为“Bob”有 2 个计数,而不是 3,因为 Joe 是记录 3 中的第一个单词

SELECT SUBSTR(TITLE, 1, INSTR(TITLE, ' ') -1) WORD
     , COUNT(SUBSTR(TITLE, 1, INSTR(TITLE, ' ') -1)) NUM 
  FROM FILM 
 GROUP BY SUBSTR(TITLE, 1, INSTR(TITLE, ' ') -1);

【问题讨论】:

  • 你的代码有什么问题?好像对我有用。
  • 你的标题可以有前导空格和混合大小写吗?也许您应该在列上使用LTRIM()UPPER()。也许你可以使用REGEXP_SUBSTR(TITLE, '^[^ ]+')
  • 这里的COUNT() 函数不需要任何东西,但这不是你真正的问题。您需要查看您的一些数据,并找出您认为应该分组的内容。例如,大写(或没有大写)。或者单词中包含标点符号之类的东西。我想你的数据集可能对某个第一个词有偏见"The"

标签: sql oracle count substring


【解决方案1】:

REGEXP_SUBSTR 有点干净。如果我了解您的要求,应该这样做:

SELECT REGEXP_SUBSTR(TITLE, '\w+') first_word, COUNT(*) 
  FROM film
 GROUP BY REGEXP_SUBSTR(TITLE, '\w+');

【讨论】:

  • 这也应该有助于处理不同(非空格)空格、标点符号等的一些奇怪的极端情况。
  • 谢谢,效果很好,超级干净
  • YW。当我阅读使用它们的代码时,我总是迷失在所有 INSTR/SUBSTR 参数中。
猜你喜欢
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 2011-06-11
  • 1970-01-01
  • 2011-06-20
相关资源
最近更新 更多