0

ORC在雅典娜与 Serde 有一张桌子。该表包含一个名为 的字符串列greeting_message。它也可以包含值。我想找出表格中有多少行具有特定文本作为模式。

假设我的示例数据如下所示:

|greeting_message |
|-----------------|
|hello world      |
|What's up        |
|                 |
|hello Sam        |
|                 |
|hello Ram        |
|good morning, hello |
|                 |
|the above row has null |
| Good morning Sir |

现在对于上表,如果我们看到总共有 10 行。其中 7 个没有空值,其中 3 个只有空/空值。

我想知道有多少行包含特定单词。

例如,考虑单词hello。它存在于 4 行中,因此此类行的百分比为 4/10,即 40%。

另一个例子:这个词morning出现在 2 条消息中。因此,此类行的百分比为 2/10,即 20%。

请注意,我null也在考虑分母的数量。

4

2 回答 2

2
SELECT SUM(greeting_message LIKE '%hello%') / COUNT(*) AS hello_percentage, 
       SUM(greeting_message LIKE '%morning%') / COUNT(*) AS morning_percentage 
FROM tablename
于 2021-03-19T10:14:41.157 回答
2

prestoDB(Amazon Athena 引擎)的语法与 MySQL 不同。以下示例创建一个临时表WITH greetings AS,然后SELECT从该表中创建:

WITH greetings AS
  (SELECT 'hello world' as greeting_message UNION ALL
   SELECT 'Whats up' UNION ALL
   SELECT '' UNION ALL
   SELECT 'hello Sam' UNION ALL
   SELECT '' UNION ALL
   SELECT 'hello Ram' UNION ALL
   SELECT 'good morning, hello' UNION ALL
   SELECT '' UNION ALL
   SELECT 'the above row has null' UNION ALL
   SELECT 'Good morning Sir')

 SELECT count_if(regexp_like(greeting_message, '.*hello.*')) / cast(COUNT(1) as real) AS hello_percentage, 
       count_if(regexp_like(greeting_message, '.*morning.*')) / cast(COUNT(1) as real) AS morning_percentage 
FROM greetings

将给出以下结果

你好百分比 早上百分比
0.4 0.2

regex_like函数可以支持许多正表达式选项,包括空格 (\s) 和其他字符串匹配要求。

于 2021-03-19T16:15:24.937 回答