Teradata - 列中的词频

Posted

技术标签:

【中文标题】Teradata - 列中的词频【英文标题】:Teradata - word frequency in a column 【发布时间】:2014-10-14 15:32:21 【问题描述】:

假设我在 teradata 表中有以下列:

Red ball
Purple ball
Orange ball

我希望我的输出是

Word    Count
Red     1
Ball    3
Purple  1
Orange  1

谢谢。

【问题讨论】:

您的 TD 版本是什么? SQL 助手版本 14.10.0.05 这是客户端版本,`select * from dbc.dbcinfoV;*返回什么? 【参考方案1】:

在 TD14 中有一个 STRTOK_SPLIT_TO_TABLE 函数:

SELECT token, COUNT(*)
FROM TABLE (STRTOK_SPLIT_TO_TABLE(1 -- this is just a dummy, usually the PK column when you need to join
                                 ,table.stringcolumn
                                 ,' ') -- simply add other separating characters
     RETURNS (outkey INTEGER,
              tokennum INTEGER,
              token VARCHAR(100) CHARACTER SET UNICODE
             )
           ) AS d
GROUP BY 1

【讨论】:

【参考方案2】:

我会这样处理:

  WITH RECURSIVE CTE  (POS, NEW_STRING, REAL_STRING) AS
(
SELECT
0, CAST('' AS VARCHAR(100)),TRIM(word)
FROM wordcount
UNION ALL
SELECT
CASE WHEN POSITION(' ' IN REAL_STRING) > 0
THEN POSITION(' ' IN REAL_STRING)
ELSE CHARACTER_LENGTH(REAL_STRING)
END DPOS,
TRIM(BOTH  ' ' FROM SUBSTR(REAL_STRING, 0, DPOS+1)),
TRIM(SUBSTR(REAL_STRING, DPOS+1))
FROM CTE
WHERE DPOS > 0
)

SELECT TRIM(NEW_STRING) as word,
count (*)
FROM CTE
group by word
WHERE pos > 0;

哪个会返回:

    word    Count(*)
    orange  1
    purple  1
    red 1
    ball    3

14 中的正则表达式可能有更简单的方法,但我还没有搞砸。

编辑:从查询中删除了一些不需要的列。

【讨论】:

当我进行这样的计数时,我以某种方式得到了不同的答案: Select sum(case when color like '%purple%' then 1 else 0 end) from wordcount 不在此示例表中,但在我的整张桌子。知道为什么吗? 老实说,没有线索。试试我上面的dnoeth的答案。它肯定干净多了。 他们都给了我相同的结果。我接受了 dnoeth 的回答,因为它确实更整洁。非常感谢,非常感谢您的帮助。【参考方案3】:

用这个改变你的桌子

name  |name2
_______________
red    |  ball
purple |  ball
orange |  ball
_______________

然后运行以下查询:

select name, count(name)as name1_count from table_test
group by name
union all
select name2,count(name2)as name2_count from table_test
group by name2;

【讨论】:

很遗憾没有,我说的是单列,该列最多可以有 10-15 个字。

以上是关于Teradata - 列中的词频的主要内容,如果未能解决你的问题,请参考以下文章

teradata 中的 0 前和 0 后

查询以合并 Oracle/Teradata 中的后续行

为啥 MS-Access 中的 Teradata 查询比 SQL Server 更快

如何过滤掉 teradata 文本字段中的非数字值?

teradata建表DDL

使用teradata模块从python连接到Teradata导致'WSA E TimedOut'