Oracle中SQL语句学习五(统计分组语句group by和having)

 

 

oracle(41)

在 应用系统开发中,进行需要统计数据库中的数据,当执行数据统计时,需要将表中的数据进行分组显示,在统计分组中是通过group by子句、分组函数、having子句共同实现的。其中group by子句用于指定要分组的列,而分组函数用户指定显示统计的结果,而having子句用户限制显示分组结果。 
   一、分组函数 
   分组函数用于统计表的数据,并作用于多行,但是返回一个结果,一般情况下,分组函数要与group by子句结合使用,Oracle数据库提供了大量的分组函数,常用的五个分组函数: 

Oracle代码  收藏代码
  1. Max:该函数用于取得列或表达式的最大值,适用于任何数据类型。  
  2. Min:该函数用于取得列或表达式的最小值,适用于任何数据类型。  
  3. Avg:该函数用于取得列或表达式的平均值,适用于数字类型。  
  4. Sum:该函数用于取得列或表达式的总和,  适用于数字类型。  
  5. Count:该函数用于取的行数总和。  



注意: 
1、当使用分组函数时,分组函数只能出现在选择列表、order by和having子句中,而不能出现在where、group by子句中。 
2、当使用分组函数时,除了函数count(*)外,其他分组函数都会忽略NULL行。 
3、当执行select语句时,如果选择列表同时包括列、表达式和分组函数,那么这些列、表达式必须出现在group by子句中。 
4、当使用分组函数时,在分组函数中可以指定all和distinct选项,其中all是默认选项,该选项表示统计所有行数据(包括重复行),distinc可以统计不同行数据。 

示例如下: 
1、取得某列最小值、最大值、平均值、总和和总计行数 

Oracle代码  收藏代码
  1. select max(id) as max_id,min(id) as min_id,avg(id) as avg_id,sum(id) as sum_id,count(*) as count from cip_temps;  


2、去除重复值 

Oracle代码  收藏代码
  1. select count(distinct id) from cip_temps;  


二、group by和having子句 
   group by子句是对统计的结果进行分组统计,而having子句用于限制分组显示结果,语法如下: 
select column,group_function from table [where condition][group by group_by_experssion][having group_function];如上所示,column用于指定列表中的列或表达式,group_function用于指定分组函数,condition用于指定条件子句,group_by_experssion用于指定分组表达式,group_function用于指定排除分组结果条件。 
1、使用group by进行单列分组,如下: 

Oracle代码  收藏代码
  1. select id as id,min(age) max_age,max(age) max_age from cip_temps group by id;  


2、使用having子句限制分组显示结果,如下: 

Oracle代码  收藏代码
  1. select id as id,count(age) count from cip_temps group by id having count(age)=2;  


三、case表达式 
case格式如下: 

Oracle代码  收藏代码
  1. case when 条件 then 返回值1 when 条件2 then 返回值2 else 返回值3 end  


示例如下: 
select name,age,address,case when id=21 then 'abc' when id=22 then 'def' else 'hij' end alias from cip_temps; 
四、Oracle常用统计函数 
1、数字函数 
  (1)、mod(m,n)该函数用于返回取得两个数字相除后的余数,如果数字为0,则返回结果为m。 
  (2)、round(n,[m]该函数用于取得四舍五入运算,如果省略m,则四舍五入至整数位;如果m是负数,则四舍五入到小数点前m位;如果m是正数,则四舍五入到小数点后m位。 
  (3)、trunc(n,[m])该函数用于截取数字,如果省略m,则将数字n的小数部门截取;如果m为正数,则将数字n截取至小数点后的第m位,如果m为负数,则将数字n截取小数点的前m为。 
示例如下: 

Oracle代码  收藏代码
  1. select mod(10,4) from dual;  
  2. select round(101234.567,-4) from dual;  
  3. select round(101.234567,4) from dual;  
  4. select trunc(101234.457,2) from dual;  
  5. select trunc(101234.457,-2) from dual;  


2、日期函数 
   (1)、round(d,[fmt])该函数用于返回日期时间的四舍五入结果,如果fmt指定年度,则7月1日为分割线;如果fmt指定月,则16日为分割线;如果fmt指定为天,则中午12:00为分割线。 
   (2)、trunc(d,[fmt])该函数用于截取日期时间数据,如果fmt指定年度,则结果为本年度的1月1日,如果fmt指定月,则结果为本月1日。 
示例如下: 

Oracle代码  收藏代码
  1. select round(sysdate,'yyyy') from dual;  
  2. select round(sysdate,'mm') from dual;  
  3. select round(sysdate,'dd') from dual;  
  4. select trunc(sysdate,'yyyy') from dual;  
  5. select trunc(sysdate,'mm') from dual;  
  6. select trunc(sysdate,'dd') from dual;  


  3、转换函数 
    (1)、to_char(date,fmt)该函数用于将日期类型转换为字符串类型,其中fmt用于指定日期格式。 
    (2)、to_date(char,fmt)该函数用于将符合特定日期格式的字符串转变为date类型的值。 
    (3)、to_number(char)该函数用于将符合特定数字格式的字符串转换为数字类型。 
示例如下: 

Oracle代码  收藏代码
  1. select to_date('2009-3-1','yyyy-mm-dd') from dual;  
  2. select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;  
  3. select to_number('10.123') from dual;  


4、其他单行函数 
    (1)、decode(expr,search1,result1[,search2,result2,...],default)该函数用于返回匹配于 特定表达式结果,如果search1匹配与expr,则返回结果result1,如果search2匹配expr,则返回结果result2,以此类推, 如果没有任何匹配关系,则返回默认default。 
示例如下: 

Oracle代码  收藏代码
  1. select name,decode(age,'bb21',id*10,'bb22',id*20,1000) as decodee from cip_temps;  


注意:decode函数和case表达式的用法基本相似,但是case表达式可以多个条件进行判断,从而返回结果。 
示例如下: 

Oracle代码  收藏代码
    1. select name,case when (  
    2.              (age='bb21' and address='cc21')   
    3.              or (age='bb22' and address='cc22')   
    4.              or (age='bb23' and address='cc23')   
    5.            ) then 1 else 0 end as cases from cip_temps

转载于:https://www.cnblogs.com/lcword/p/5707483.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做开发十年,我总结出了这些开发经验

本文由云社区发表,原文转载地址:https://www.cnblogs.com/qcloud1001/p/10218876.html 在一线做了十年的开发,经历了网易、百度、腾讯研究院、MIG 等几个地方,陆续做过 3D 游戏、2D 页游、浏览器、移动端翻译 app 等。 积累了一些感悟。必然有依然幼稚的…

2016年4月 TIOBE 编程语言排行榜

4月头条: Visual Basic 正在渐行渐远 COBOL, BASIC 和 FORTRAN 很长一段时间作为主力开发语言被使用。有很多软件使用这些语言来编写,并且发展的不亦乐乎。然而经过多年的发展,COBOL和FORTRAN逐渐被抛弃,而得益于微软的存在,BASIC…

基于zbus的MySQL透明代理(100行)

项目地址 https://git.oschina.net/rushmore/zbus 我们上次讲到zbus网络通讯的核心API: Dispatcher -- 负责-NIO网络事件Selector引擎的管理,对Selector引擎负载均衡 IoAdaptor -- 网络事件的处理,服务器与客户端共用,负责读写&am…

linux path环境变量起什么作用,shell基础(5)PATH环境变量的作用和使用方法

释放双眼,带上耳机,听听看~!关于PATH的作用PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径。比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根本不在这个两个目录下…

python3 自动打包部署war包

2019独角兽企业重金招聘Python工程师标准>>> 1 调用maven 命令打包 mvn -B -f D:/workspace/ksdcourse clean package 2 调用tomcat 部署war包 ; 需要添加 CATALINA_HOME的环境变量 代码如下: #!/usr/bin/python3# -*- coding: utf-8 -*-impo…

day1作业二:多级菜单操作

作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表、字典 要求:输入back返回上一层,输入quit退出整个程序 思路: &am…

JDK源码分析(5)之 HashMap 相关

HashMap作为我们最常用的数据类型,当然有必要了解一下他内部是实现细节。相比于 JDK7 在JDK8 中引入了红黑树以及hash计算等方面的优化,使得 JDK8 中的HashMap效率要高于以往的所有版本,本文会详细介绍相关的优化,但是主要还是写 …

位运算-查找数组中唯一成对的数

基础实例一:使用位运算判断数的奇偶性 实例代码: public class Test {public static void main(String[] args) {System.out.println(isOdd(49));System.out.println(isOdd(50));}// 与运算public static boolean isOdd(int i){return (i & 1) ! 0;…

react-native-Cocoapods-Swift-Project

https://reactnative.cn/docs/integration-with-existing-apps/ 1、创建一个xcode工程,single View就行,项目语言选择swift,oc的直接生成就行不用这么麻烦。 2、把跟目录上创建 node的package.json,执行命令 npm init npm install react-nati…

第二阶段站立会议08

站立会议内容: 大家准备继续将代码进行融合,进行测试对一些功能进行优化。 1、会议照片: 2、任务展板: 3、燃尽图: 转载于:https://www.cnblogs.com/smcoder/p/7002539.html

git——学习笔记(三)分支管理

一、创建、合并分支 每次提交,git都往后走一格,串成一跳时间线,head指向的是分支,分支指向提交。master是主分支,dev是另一条分支,分支就像指针一样,合并、删除分支时,修改的都是指针…

阿里巴巴是如何打通 CMDB,实现就近访问的?

CMDB在企业中,一般用于存放与机器设备、应用、服务等相关的元数据。当企业的机器及应用达到一定规模后就需要这样一个系统来存储和管理它们的元数据。有一些广泛使用的属性,例如机器的IP、主机名、机房、应用、region等,这些数据一般会在机器…

[原创]K8_C段旁注工具6.0 新增SMB漏洞扫描

工具: K8_C段旁注工具6.0_0510[K.8]编译: 自己查壳组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 2017/5/24 13:25:54简介: 图片: 功能: 更新历史:6.0 20170510[] C段SMB漏洞扫描(探测系统版本)[] 批量操作-文本比较提取新增内容[] 旁注查…

【公告】社区周刊即日起停刊

各位订阅51CTO社区周刊的小伙伴们,大家好,我是51CTO社区的大管家蘑菇,今天来是想跟大家说,本期周刊将是我们最后一期邮件期刊,没错,是最后一期(请珍惜它~)。或许你会问,停…

springcloud-zuul路由网关

路由网关(zuul) 在微服务架构中,需要多个基础的服务治理组件,包括服务注册与发现、服务消费、负载均衡、断路器、智能 路由、配置管理等,由这个基础组件相互协作,共同组建了一个简单的微服务系统。一个简单的微服务系统如下 图 总…

python DB.fetchall()--获取数据库所有记录列表

查询到的数据格式为列表: 多个元素的列表: 单个元素的列表: 转载于:https://www.cnblogs.com/apple2016/p/5734161.html

Laravel Composer 命令大全

2019独角兽企业重金招聘Python工程师标准>>> ​​​​​​​1、安装 Laravel composer create-project --prefer-dist laravel/laravel 5.xx user-project 2、.env 文件操作 生成 APP_KEY:php artisan key:generate 缓存 .env 配置&#xff…

linux中initrd的含义,Linux2.6 内核的 Initrd 机制解析

1.什么是 Initrdinitrd 的英文含义是 boot loaderinitialized RAM disk,就是由 boot loader 初始化的内存盘。在 linux内核启动前, boot loader 会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访…

VBS基础篇 - 常量

VBS基础篇 - 常量 常量:指的是在程序运行过程中其值保持不变的量,它用来保存固定不变的数值,字符串等常数 。 常量的定义:在vbscript中使用使用 Const 指令可以创建名称具有一定含义的字符串型或数值型常量,并给它们赋…

利用深度学习来预测股票价格变动

https://www.toutiao.com/i6644852565341110791/ 利用深度学习来预测股票价格变动(长文,建议收藏) 原创 不靠谱的猫 2019-01-10 21:01:39完整架构概述 在这篇文章中,我将创建一个预测股票价格变动的完整过程。我们将使用生成对抗网…