Oracle SQL Query,用于拆分和计算列中的值的功能?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle SQL Query,用于拆分和计算列中的值的功能?相关的知识,希望对你有一定的参考价值。
我有一个场景,我想计算一个值出现在列中的次数,但现在的问题是列有多个分隔符分隔。
我尝试使用Split Function但没有获得所需的结果下面是数据的示例:
ID Column_Value
011 Analytics,Transpose
012 Analytics
013 Analytics,Transpose,Vector
014 Vector,Dimension
现在,我的要求是计算Analytics在Column_Value中出现的次数,计算Transpose出现的次数,最后计算其他值的其余值(即Vector和Dimnesion)出现的次数。
预期结果:
Count_Analytics Count_Transpose Count_Rest
3 2 2
答案
如果您想要计算除了Analytics或Transpose之外的任何值的行数,您可以执行以下操作:
select
count(case when regexp_like(column_value, '(^|,)Analytics(,|$)') then column_value end)
as count_analytics,
count(case when regexp_like(column_value, '(^|,)Transpose(,|$)') then column_value end)
as count_transpose,
count(regexp_replace(regexp_replace(column_value, '(^|,)Analytics(,|$)'), '(^|,)Transpose(,|$)'))
as count_rest
from your_table;
COUNT_ANALYTICS COUNT_TRANSPOSE COUNT_REST
--------------- --------------- ----------
3 2 2
如果要计算其他值的出现次数而不是行数,可以执行以下操作:
select
count(case when regexp_like(column_value, '(^|,)Analytics(,|$)') then column_value end)
as count_analytics,
count(case when regexp_like(column_value, '(^|,)Transpose(,|$)') then column_value end)
as count_transpose,
sum(regexp_count(
regexp_replace(regexp_replace(column_value, '(^|,)Analytics(,|$)'), '(^|,)Transpose(,|$)'),
'[^,]+')) as count_rest
from your_table;
COUNT_ANALYTICS COUNT_TRANSPOSE COUNT_REST
--------------- --------------- ----------
3 2 3
另一答案
您可以使用以下代码
SELECT DECODE(TEXT_RESULT, 'ANALYTICS', 'ANALYTICS', 'TRANSPOSE', 'TRANSPOSE', 'OTHERS') RES, COUNT(1)
FROM (WITH TEMP AS (SELECT 1 ID, 'ANALYTICS,TRANSPOSE' TEXT FROM DUAL
UNION
SELECT 2 ID, 'ANALYTICS' TEXT FROM DUAL
UNION
SELECT 3 ID, 'ANALYTICS,TRANSPOSE,VECTOR' TEXT FROM DUAL
UNION
SELECT 4 ID, 'VECTOR,DIMENSION' TEXT FROM DUAL)
SELECT DISTINCT ID,
REGEXP_SUBSTR(TEXT, '[^,]+', 1, LEVEL) TEXT_RESULT
FROM TEMP
CONNECT BY LEVEL <= REGEXP_COUNT(TEXT, '[^,]+'))
GROUP BY DECODE(TEXT_RESULT, 'ANALYTICS', 'ANALYTICS', 'TRANSPOSE', 'TRANSPOSE', 'OTHERS');
结果如下。
RES COUNT(1)
1 ANALYTICS 3
2 OTHERS 3
3 TRANSPOSE 2
使用regexp_substr,我们将文本与逗号分隔为分隔符,然后您可以获取计数。
如果你仍然想要问题中显示的结果,你可以使用枢轴功能..
以上是关于Oracle SQL Query,用于拆分和计算列中的值的功能?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 Oracle SQL 中的某些条件将列拆分为 2?