[英]Counting values comma separated
我有下表:
A V
- -
A1 B, C
A2 C, 2W
A3 D
A4 10K, 10W, 2A
我想計算 V 中的值並按出現順序排列它們。 預期 output:
O COUNT(*)
- -------
W 12
K 10
A 2
C 2
B 1
D 1
您可以使用REGEX_SUBSTR()
和REGEXP_REPLACE()
函數的組合以及分層查詢,假設所有以逗號分隔的元素,無論何時修剪空格,都是正數 integer + 一個字母的形式,例如
WITH t2 AS
(
SELECT TRIM(REGEXP_SUBSTR(v,'[^,]+',1,level)) AS v
FROM t
CONNECT BY level <= REGEXP_COUNT(v,',')+1
AND PRIOR SYS_GUID() IS NOT NULL
AND PRIOR a = a
)
SELECT NVL(SUM(REGEXP_REPLACE(v,'[^[:digit:]]')),
CASE WHEN COUNT(*)>1 THEN COUNT(*) END)||REGEXP_REPLACE(v,'[^[:alpha:]]') AS o
FROM t2
GROUP BY REGEXP_REPLACE(v,'[^[:alpha:]]')
編輯(取決於問題的最后編輯):只需刪除連接運算符,並以COUNT
聚合為條件,例如
SELECT REGEXP_REPLACE(v,'[^[:alpha:]]') AS o,
NVL(SUM(REGEXP_REPLACE(v,'[^[:digit:]]')),COUNT(*)) AS count
FROM t2
GROUP BY REGEXP_REPLACE(v,'[^[:alpha:]]')
ORDER BY count DESC, o
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.