在oracle SQL中,如何根据条件对记录数进行计数

问题描述 投票:1回答:4

我的表格结构如下:

Col2
A
A
B
B
E
E

我希望SQL查询向我输出以下内容:

Internal    4
External    2
Total   6

逻辑:如果Col2中的值为A,B,则应将其汇总为Internal,如果为E,则应将其汇总为External。

sql oracle
4个回答
1
投票
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;

Here is a DEMO


1
投票

如下尝试使用全部合并并创建自定义组

   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

0
投票
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

0
投票

从[SELECT Col2作为Col2,count(Col2)作为Col2Count作为选择的内部,选择sum(Col2Count)作为内部[Col2)的FROM表名组,其中(A,B)中的Col2;

这将为您提供结果:

内部4


0
投票

要映射列值,请使用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
© www.soinside.com 2019 - 2024. All rights reserved.