我的表格结构如下:
Col2
A
A
B
B
E
E
我希望SQL查询向我输出以下内容:
Internal 4
External 2
Total 6
逻辑:如果Col2中的值为A,B,则应将其汇总为Internal,如果为E,则应将其汇总为External。
select 'Internal' "summed up as"
,sum(case when Col2 in ('A', 'B') then 1
else 0
end) "sum"
from test
union
select 'External' "summed up as"
,sum(case when Col2 = 'E' then 1
else 0
end) "sum"
from test
union
select 'Total' "summed up as"
, count(Col2) "sum"
from test;
如下尝试使用全部合并并创建自定义组
select case when col2 in ('A','B') then 'Internal' else 'External' end,
count(*) as result
from table_name
group by case when col2 in ('A','B') then 'Internal' else 'External' end
union all
select 'total', count(*) from table_name
select sum(case when col2 in ('A', 'B') then 1 else 0 end) as internal,
sum(case when col2 = 'E' then 1 else 0 end) as external,
count(col2) as total
from your_table
从[SELECT Col2作为Col2,count(Col2)作为Col2Count作为选择的内部,选择sum(Col2Count)作为内部[Col2)的FROM表名组,其中(A,B)中的Col2;
这将为您提供结果:
内部4
要映射列值,请使用DECODE
,只需提供该列的原始值和新值的列表即可。
select decode(col2,'A','Internal','B','Internal','E','External') col from tab
要计算总数,您不需要重新扫描整个表(性能下降到一半),而是使用group by rollup
来计算Total
with t as (
select decode(col2,'A','Internal','B','Internal','E','External') col from tab)
select nvl(col,'Total') col, count(*) cnt
from t
group by rollup (col)
结果
COL CNT
-------- ----------
External 2
Internal 4
Total 6