使用SUBSTR和REGEXP_COUNT计算列中第一个单词的实例



使用Oracle SQL,我在一个名为OBJECT的表中有一个名为"title"的字符串列。单词之间用空格分隔。

我想写一个查询计算表中有多少标题与其他标题具有相同的第一个单词。我想输出单词,以及以该单词开头的条目的计数,如FIRSTWORD, WORD_COUNT。如

FIRSTWORD     WORD_COUNT
Word1   23
Word2   15

我使用SUBSTR和INSTR来获取每个条目的第一个单词,并使用regexp_count来尝试计算它出现的次数。到目前为止,我可以让它输出第一个单词的列表,但我的计数总是0:

SELECT 
(SUBSTR(title, 0, INSTR(title, ' ')-1)) AS FIRSTWORD, 
(REGEXP_COUNT(title, INSTR(title, ' ')-1)) AS WORD COUNT 
FROM OBJECT GROUP BY title;

子查询应该可以达到这个目的。

WITH firstwords AS (
  SELECT (SUBSTR(OBJECT.title, 0, INSTR(OBJECT.title, ' ')-1)) AS WORD
  FROM OBJECT)
SELECT word, count(word)
FROM firstwords
GROUP BY word;

供参考。实际上不需要子查询。您可以在一个级别上进行计算:

select SUBSTR(OBJECT.title, 0, INSTR(OBJECT.title, ' ')-1)) AS WORD, count(*)
from OBJECT
group by SUBSTR(OBJECT.title, 0, INSTR(OBJECT.title, ' ')-1)) ;

最新更新