mit*_*sky 2 sql oracle group-by rollup count
SELECT a,b,count(*)
FROM t
GROUP BY rollup(a,b)
Run Code Online (Sandbox Code Playgroud)
结果:
a1, b1, 10
a1, b2, 90
a1, , 100
Run Code Online (Sandbox Code Playgroud)
我需要:
a1, b1, 10, 100
a1, b2, 90, 100
Run Code Online (Sandbox Code Playgroud)
怎么样?
此表模拟您的情况:
SQL> create table t (a,b)
2 as
3 select 'a1', 'b1'
4 from dual
5 connect by level <= 10
6 union all
7 select 'a1', 'b2'
8 from dual
9 connect by level <= 90
10 /
Table created.
Run Code Online (Sandbox Code Playgroud)
只有三行的结果错过了总计,因此有点不准确:汇总(a,b)导致3个分组集合中有4行.
SQL> select a
2 , b
3 , count(*)
4 from t
5 group by rollup(a,b)
6 /
A B COUNT(*)
-- -- ----------
a1 b1 10
a1 b2 90
a1 100
100
4 rows selected.
Run Code Online (Sandbox Code Playgroud)
通过常规分组和分析功能,您可以获得所需的结果集:
SQL> select a
2 , b
3 , count(*)
4 , sum(count(*)) over (partition by a)
5 from t
6 group by a
7 , b
8 /
A B COUNT(*) SUM(COUNT(*))OVER(PARTITIONBYA)
-- -- ---------- -------------------------------
a1 b2 90 100
a1 b1 10 100
2 rows selected.
Run Code Online (Sandbox Code Playgroud)
问候,Rob.