вземете броя на думите в колона sql

след следните запитвания

SELECT * FROM table;

SELECT REGEXP_REPLACE(description || '!', '[^[:punct:]]') 
    FROM table;

SELECT REGEXP_REPLACE ( description, '[' ||  REGEXP_REPLACE ( description || '!', '[^[:punct:]]')  || ']') test 
    FROM table;

SELECT REGEXP_REPLACE(UPPER(TEST), ' ', '#') test 
    FROM (SELECT REGEXP_REPLACE (description, '[' ||  REGEXP_REPLACE (description || '!', '[^[:punct:]]')  || ']') test 
    FROM table);

Имам колона в sql на oracle, изглеждаща така:

TEST
 ---------------------------------------------
 SPOKE#WITH#MR#SMITHS#ASSISTANT
 EMAILED#FOR#VISIT
 SCHEDULING#OFFICE#LM#FOR#VISIT
 LM#FOR#VISIT
 LM#FOR#VISIT
 PHONE#CALL
 ---------------------------------------------

всички думи са разделени с #. Бих искал да получа броя на срещанията на думи, например:

word | count
------------
LM   |  3
FOR  |  4
VISIT|  4
PHONE|  1

и т.н. и т.н. Аз съм нов в oracle sql и съм запознат само с елементарни команди на mysql. всяка помощ или насоки към уроци също биха били полезни. Благодаря ти.

редактиране: има приблизително 1500 реда с около 250 уникални отговора, които се опитвам да отчета


person Ted    schedule 26.03.2014    source източник
comment
Въпросите, изискващи код, трябва да демонстрират минимално разбиране на проблема, който се решава. Актуализирайте въпроса си с кода, който сте опитали.   -  person Kermit    schedule 26.03.2014
comment
@Ted И така, може да има дублиращи се стойности за TEST, като LM#FOR#VISIT в примерните данни? Споменахте, че ще има около 250 уникални отговора.   -  person Joseph B    schedule 28.03.2014
comment
@JosephB Да, правилно   -  person Ted    schedule 02.04.2014


Отговори (1)


WITH mydata AS
  ( SELECT 'SPOKE#WITH#MR#SMITHS#ASSISTANT' AS str FROM dual
    UNION ALL
    SELECT 'EMAILED#FOR#VISIT' FROM dual
    UNION ALL
    SELECT 'SCHEDULING#OFFICE#LM#FOR#VISIT' FROM dual
    UNION ALL
    SELECT 'LM#FOR#VISIT' FROM dual
    UNION ALL
    SELECT 'LM#FOR#VISIT' FROM dual
    UNION ALL
    SELECT 'PHONE#CALL' FROM dual
  ),
  splitted_words AS
  (
    SELECT REGEXP_SUBSTR(str,'[^#]+', 1, level) AS word
    FROM mydata
      CONNECT BY level   <= LENGTH(regexp_replace(str,'[^#]')) + 1
    AND PRIOR str         = str
    AND PRIOR sys_guid() IS NOT NULL
  )
SELECT word,
      COUNT(1)
FROM splitted_words
GROUP BY word;

Ако таблицата ви е YOUR_TABLE и колоната е YOUR_COLUMN

  WITH splitted_words AS
  (
    SELECT REGEXP_SUBSTR(YOUR_COLUMN,'[^#]+', 1, level) AS word
    FROM YOUR_TABLE
      CONNECT BY level   <= LENGTH(regexp_replace(YOUR_COLUMN,'[^#]')) + 1
    AND PRIOR YOUR_COLUMN         = YOUR_COLUMN
    AND PRIOR sys_guid() IS NOT NULL
  )
SELECT word,
      COUNT(1)
FROM splitted_words
GROUP BY word;
person Maheswaran Ravisankar    schedule 26.03.2014
comment
благодаря за отговора ви... но колоната е приблизително 1500 реда с вероятно над 250 уникални отговора... как да отчета всички отговори? - person Ted; 28.03.2014
comment
@Ted Просто избирате директно от таблицата. WITH splitted_words AS ( SELECT REGEXP_SUBSTR(test,'[^#]+', 1, level) AS word FROM ‹‹tablename›› CONNECT BY level ‹= LENGTH(regexp_replace(test,'[^#]')) + 1 AND PRIOR test = test AND PRIOR sys_guid() IS NOT NULL ) SELECT дума, COUNT(1) FROM splitted_words GROUP BY дума; - person Joseph B; 28.03.2014
comment
@JosephB Изглежда не мога да разбера защо, но получавам грешката "TEST": invalid identifier - person Ted; 02.04.2014
comment
@Ted mydata в моята заявка е просто изглед за показване на някои примерни данни.. Във вашия случай можете да го пропуснете.. Актуализирах отговора си. Моля те, провери. - person Maheswaran Ravisankar; 02.04.2014
comment
@OracleUser все още получава същата грешка... ето как изглежда моята заявка (замествайки YOUR_TABLE за моята таблица и YOUR_COLUMN като TEST): 'WITH splitted_words AS ( SELECT REGEXP_SUBSTR(TEST,'[^#]+', 1, level ) AS word FROM YOUR_TABLE CONNECT BY level ‹= LENGTH(regexp_replace(TEST,'[^#]')) + 1 AND PRIOR TEST = TEST AND PRIOR sys_guid() IS NOT NULL ) SELECT дума, COUNT(1) FROM splitted_words GROUP ПО дума;' - person Ted; 02.04.2014
comment
Можете ли да се присъедините към чата тук - person Maheswaran Ravisankar; 02.04.2014
comment
@Ted Изглежда, че TEST не е колона във YOUR_TABLE. Бихте ли могли да стартирате SELECT TEST FROM YOUR_TABLE; да го проверя? - person Joseph B; 03.04.2014
comment
@JosephB правилно, TEST не е колона в моята таблица, но преди това пуснах няколко заявки, за да направя колона, наречена TEST. те са в горната част на моя оригинален пост - person Ted; 07.04.2014