首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在oracle中,如何根据条件对记录的no进行计数。

在oracle中,如何根据条件对记录的no进行计数。
EN

Stack Overflow用户
提问于 2020-01-29 06:41:52
回答 5查看 106关注 0票数 2

我的桌子结构如下:

代码语言:javascript
复制
Col2
A
A
B
B
E
E

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

代码语言:javascript
复制
Internal    4
External    2
Total   6

逻辑:如果Col2中的值是A,B,那么它应该被总结为内部,如果E,那么它应该被总结为外部。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-01-29 07:06:23

若要映射列值,请使用解码器,简单地提供列的原始值和新值的列表。

代码语言:javascript
复制
select decode(col2,'A','Internal','B','Internal','E','External') col from tab

要计算总数,不需要重新扫描整个表(性能下降到一半),而是使用计算总数的一组一卷

代码语言:javascript
复制
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)

结果

代码语言:javascript
复制
COL             CNT
-------- ----------
External          2
Internal          4
Total             6
票数 2
EN

Stack Overflow用户

发布于 2020-01-29 06:48:36

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-01-29 06:51:00

代码语言:javascript
复制
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;

这是一个演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59961702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档