`

Oracle分组分段统计-sum+case when+group by使用实例

 
阅读更多

 实例演示:

  (1)查询表users中的数据。

  select u.id,u.realname,U.SEX from users u;

  查询结果如下

  ID    REALNAME SEX
  1  10082 松XX
  2  10084 林XX     1
  3  10087 西XX
  4  10100 胡XX
  5  10102 龙XX     1
  ......

  (2)上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用CASE语句。

 

select u.id,u.realname,U.SEX,
  ( case u.sex
  when 1 then '男'
  when 2 then '女'
  else '空的'
  END
  ) 性别
from users u;

 

  查询结果

  ID    REALNAME SEX  性别
  1 10082 松XX         空的
  2 10084 林XX     1   男
  3 10087 西XX         空的
  4 10100 胡XX         空的
  5 10102 龙XX     1   男
  ......

  如果不希望列表中出现"sex"列,语句如下

 

select u.id,u.realname,
( case u.sex
when 1 then '男'
when 2 then '女'
else '空的'
END
) 性别
from users u;

 

  (3)将sum与case结合使用,可以实现分段统计。

  例如现在我希望将上表中各种性别的人数进行统计,sql语句如下

 

select
sum( case u.sex when 1 then 1 else 0 end) 男性,
sum( case u.sex when 2 then 1 else 0 end) 女性,
sum( case when u.sex<>1 and u.sex<>2  then 1 else 0 end) 性别为空
from users u;

 

  执行结果如下

  男性  女性  性别为空
  1 41    15   0

  如果学校内有数千名学生进行了考试,想统计60分以下、60-80分、80-100分的总人数,就可以使用这样的语句来实现。只是条件不同而已。

  (4)如果sum、case when结合group by使用,可以进行分组分段统计。

  如,我希望统计users表中每个创建者创建的男性、女性、无性别的用户总数(数据表中有一个字段creator_id,表示创建者的ID),语句如下

 

select u.creator_id 创建者ID,
sum( case u.sex when 1 then 1 else 0 end) 男性,
sum( case u.sex when 2 then 1 else 0 end) 女性,
sum( case when u.sex<>1 and u.sex<>2  then 1 else 0 end) 性别为空
from users u
group by u.creator_id;

 

  查询结果如下

  创建者ID 男性 女性 性别为空
  1          0    0   0
  2 10000    35   12  0
  3 11100    0    0   0
  4 11060    0    0   0
  5 11040    0    0   0
  6 11080    2    0   0
  7 10281    3    3   0
  8 10580    1    0   0

  上例中只有一个分组字段,实现了1级统计;如果有多个分组字段,应该可以实现多级统计了。如有居民统计表,保存了人口信息、人口所在市、区、街道信息等,欲统计深圳市的人口数据,实现统计如下统计结果的话,就可以通过多级分组实现。

  区划    男性居民     女性居民
  深圳市             
  南山区            
  粤海            
  科技            
  宝安区            
  新安           

  (5)case when的语法

 

CASE
WHEN <A> THEN <somethingA>
WHEN <B> THEN <somethingB>
ELSE <somethingE>
END

 

 

分享到:
评论

相关推荐

    Oracle高级操作函数学习笔记

    它们通常与GROUP BY语句一起使用,对分组后的数据进行聚合计算。 #### 集合操作 集合操作可以将多个SELECT查询结果集进行合并、求交集和差集等。具体操作包括: 1. **UNION和UNION ALL** - UNION操作用于合并两个...

    oracle 面试题

    SELECT SUM(CASE WHEN fsalary &gt; 9999 AND fage &gt; 35 THEN 1 ELSE 0 END), SUM(CASE WHEN fsalary &gt; 9999 AND fage ), SUM(CASE WHEN fsalary &lt; 9999 AND fage &gt; 35 THEN 1 ELSE 0 END), SUM(CASE WHEN fsalary ...

    Oracle函数(chm)

    - `GROUP BY`: 用于分组查询,常与聚合函数一起使用。 - `JOIN`: 实现表之间的连接操作,如INNER JOIN, LEFT JOIN, RIGHT JOIN等。 7. **递归和游标**: - `CONNECT BY`: 用于创建层次查询,处理树状结构数据。 ...

    Sql,oracle数据表行转列问题

    在SQL Server 2000中,我们可以使用CASE WHEN语句和MAX聚合函数来实现行转列操作。下面是一个示例代码: ```sql select 姓名 as 姓名, max(case 课程 when '语文' then 分数 else 0 end) 语文, max(case 课程 ...

    oracle培训18天老师笔记

    1. 使用SQL查询生成报表,通过GROUP BY和聚合函数(如COUNT, SUM, AVG, MAX, MIN)来统计和分析数据。 2. 创建自定义视图(VIRTUAL TABLE),简化复杂查询,提高数据访问效率。 3. 使用Oracle的报告服务(如Oracle ...

    Oracle的数据表中行转列与列转行的操作实例讲解

    sum(case when month='1' then amount end) as 一月, sum(case when month='2' then amount end) as 二月, sum(case when month='3' then amount end) as 三月 from Tb_Amount group by years order by years ...

    oracle从入门到精通

    - **条件表达式**:如 `CASE WHEN ... THEN ... ELSE ... END` 用于条件判断。 ##### 1.8 使用子函数产生的总计 - **聚合函数**:如 `SUM(column_name)`、`COUNT(*)`、`AVG(column_name)` 等。 ##### 1.9 子查询 -...

    Oracle SQL 内置函数总结

    - `GROUP BY` 和 `HAVING`:用于分组数据和在分组后进行过滤。 6. **其他函数**: - `L trim()`, `R trim()`, `Trim()`: 去除字符串的前导或尾随空格。 - `LENGTH()`: 返回字符串的长度。 - `CHR()`: 通过ASCII...

    SQL21天自学通

    - **GROUP BY子句**:对查询结果分组。 - **HAVING子句**:对GROUP BY的结果进一步过滤。 - **子句的综合应用**:结合以上子句实现复杂查询。 #### 第六天:表的联合 - **介绍**:联合多个表的数据。 - **在一个...

    PLSQL编程及优化

    它可以与聚合函数如SUM、COUNT、AVG、MAX、MIN结合使用,还可以利用CASE WHEN进行复杂的条件判断。例如,创建表student、subjects和stu_grade的示例: ```sql CREATE TABLE student ( stu_id NUMBER(10) PRIMARY ...

Global site tag (gtag.js) - Google Analytics