2016-07-17 10 views
-2

我的桌子好像是這樣;如何在oracle中組合和計數兩列?

A   B 
1   100 
1   102 
1   105 
2   100 
2   105 
3   100 
3   102 

我想這樣的輸出:

A   Count(B) 
1   3 
1,2   2 
1,2,3  3 
2   2 
3   2 
2,3   2 

我怎樣才能做到這一點?

我嘗試使用listagg,但它不起作用。

+0

我不完全理解的結果。你能解釋他們是如何計算的? –

+0

爲什麼不能有''2,3 .............. 2「'?這是很不清楚你問的。 –

+0

對不起,我的英文,我忘了,也有2,3 ........ 2輸出 –

回答

0

我懷疑你想要統計數據中A的集合的數量 - 並且你的樣本結果會混亂。

如果是這樣的:

select grp, count(*) 
from (select listagg(a, ',') within group (order by a) as grp 
     from t 
     group by b 
    ) b; 

這爲您提供了存在於數據的完整組合計數。結果將是:

1,2,3 1 
1,3  1 
1,2  1 

您可以通過執行獲得行的原始數量:

select grp, sum(cnt) 
from (select listagg(a, ',') within group (order by a) as grp, count(*) as cnt 
     from t 
     group by b 
    ) b; 
0

甲骨文設置

CREATE TABLE table_name (A, B) AS 
SELECT 1, 100 FROM DUAL UNION ALL 
SELECT 1, 102 FROM DUAL UNION ALL 
SELECT 1, 105 FROM DUAL UNION ALL 
SELECT 2, 100 FROM DUAL UNION ALL 
SELECT 2, 105 FROM DUAL UNION ALL 
SELECT 3, 100 FROM DUAL UNION ALL 
SELECT 3, 102 FROM DUAL; 

查詢

SELECT A, 
     COUNT(B) 
FROM (
    SELECT SUBSTR(SYS_CONNECT_BY_PATH(A, ','), 2) AS A, 
     B 
    FROM table_name 
    CONNECT BY PRIOR B = B 
    AND PRIOR A + 1 = A 
) 
GROUP BY A 
ORDER BY A; 

輸出

A  COUNT(B) 
----- ---------- 
1    3 
1,2   2 
1,2,3   1 
2    2 
2,3   1 
3    2