我在雅典娜有一个带有ORC
Serde的表。该表包含一个名为greeting_message
的字符串列。它还可以包含null值。我想知道表中有多少行有特定的文本作为模式。
假设我的样本数据如下:
|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/10,也就是20%。
注意我也在分母的计数中考虑null
。
SELECT SUM(greeting_message LIKE '%hello%') / COUNT(*) AS hello_percentage,
SUM(greeting_message LIKE '%morning%') / COUNT(*) AS morning_percentage
FROM tablename
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
将给出以下结果
hello_percentage | 晨间百分比 |
---|---|
0.4 | 0.2 |