假設我是否有逐行的水果名稱,如木瓜、橙子等...
我將如何找到每個字串中出現的最大字符。對于木瓜,它將是“a”,因為它重復了 3 次對于橙色,它將是所有字符,因為對于每個字符,它只重復一次我需要使用 Oracle SQL 解決上述查詢
uj5u.com熱心網友回復:
這是一種選擇:
SQL> WITH
2 fruit (name)
3 AS
4 (SELECT 'Papaya' FROM DUAL
5 UNION ALL
6 SELECT 'Orange' FROM DUAL),
7 temp
8 AS
9 (SELECT name, SUBSTR (name, COLUMN_VALUE, 1) letter
10 FROM fruit
11 CROSS JOIN
12 TABLE (
13 CAST (
14 MULTISET ( SELECT LEVEL
15 FROM DUAL
16 CONNECT BY LEVEL <= LENGTH (name))
17 AS SYS.odcinumberlist))),
18 temp2
19 AS
20 ( SELECT name,
21 letter,
22 COUNT (*) cnt,
23 RANK () OVER (PARTITION BY name ORDER BY COUNT (*) DESC) rnk
24 FROM temp
25 GROUP BY name, letter)
26 SELECT name,
27 LISTAGG (letter, ', ') WITHIN GROUP (ORDER BY letter) letters,
28 cnt
29 FROM temp2
30 WHERE rnk = 1
31 GROUP BY name, cnt;
NAME LETTERS CNT
------ -------------------- ----------
Orange O, a, e, g, n, r 1
Papaya a 3
SQL>
TEMPCTE 將名稱拆分成行(按每個字母)TEMP2按計數降序排列它們- final
select回傳排名“最高”的字母
uj5u.com熱心網友回復:
我有另一個想法。
當資料如下。
create table t as
select 'Papaya' w from dual union all
select 'Orange' w from dual union all
select 'Baby' w from dual union all
select 'CocaCola' w from dual
獲取字母的最大出現次數并按以下方式計數
with cte as (
select w, az.c find, regexp_count(w, az.c, 1, 'i') cnt
from t,
(select chr(rownum 96) c
from dual
connect by rownum <= 26
) az
),
cte2 as (
select w, max(lpad(cnt, 10, '0') || find) cnt_find
from cte
group by w
)
select w, substr(cnt_find, 11, 999) find, to_number(substr(cnt_find, 1, 10)) cnt
from cte2
結果:
| W | FIND | CNT |
|----------|------|----:|
| Orange | r | 1 |
| Papaya | a | 3 |
| Baby | b | 2 |
| CocaCola | c | 3 |
由于字母集限制為26種,我生成了26行與單詞表交叉連接。
select chr(rownum 96) c
from dual
connect by rownum <= 26
并使用 regexp_count 獲取每個字母表的出現次數。
select w, az.c find, regexp_count(w, az.c, 1, 'i') cnt
并檢索最大出現次數,然后是按單詞分組的字母表。(lpad 用于為所有出現填充 10 長度以使用 substr 下一步)
select w, max(lpad(cnt, 10, '0') || find) cnt_find
from cte
group by w
并劃分出現次數和字母的最大值。(substr 是 1 到 10,11 到結束,因為所有最大出現的長度都是 10)
select w, substr(cnt_find, 11, 999) find, to_number(substr(cnt_find, 1, 10)) cnt
from cte2
此鏈接詳細顯示了我如何進行此查詢。
https://dbfiddle.uk/?rdbms=oracle_18&fiddle=29516e70a1270c4035d7165832905777
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/396841.html
上一篇:如何搜索log4j漏洞?
