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,一经查实,立即删除!

相关文章

linux系统去吧,要开始另一个linux操作系统的尝试了,说说我以前的ubuntu吧

我想,除了尝试一下ubuntu的神奇魅力的同时,我应该去体验一下RedHat的神奇吧!马上就要告别ubuntu了,我想把我的部分使用经历和大家分享分享!首先,无论是ubuntu8.04、10.04还是10.1的效果都是很好的&#xff…

课程编码查询_付出还是不付出:生活中最好的事情(例如编码课程)是否免费?...

课程编码查询by Rick West由里克韦斯特(Rick West) 付出还是不付出:生活中最好的事情(例如编码课程)是否免费? (To pay or not to pay: are the best things in life — like coding courses — free?) Recently, I’ve been working on a project tha…

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

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

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

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

linux系统不知道电脑密码怎么办,Linux如何修复系统的Root密码 -电脑资料

如果因为忘了root口令导致无法登录系统,请试用下面的方法来改忘记的root口令:方法一:1、重新启动系统,2、把光标定位在该选项上按下字母“e”键进入这个引导的编辑状态;3、该选项有三行语句,请用光标选中第…

控制语句(4)

第4章 控制语句if<条件1>&#xff1a; <语句1>elif<条件2>: <语句2>elif<条件3>&#xff1a; <语句3>......else: <语句n>说明&#xff1a;elif语句&#xff0c;只要有一个条件成立&#xff0c;就会将其后的一个部分语句执行…

02 socketserver客户端

import socket client socket.socket() client.connect((127.0.0.1,8001))while 1:msg input(客户端说>>>)client.send(msg.encode(utf-8))from_server_msg client.recv(1024)print(from_server_msg.decode(utf-8)) 转载于:https://www.cnblogs.com/work14/p/10235…

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

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

linux添加jetdirect协议,Padavan 路由器固件 不能驱动 hp1005、hp1020之类打印机 foo2zjs ZjStream协议的linux打印机驱动程序...

单击链接&#xff0c;或剪切并粘贴下面的整个命令行以下载驱动程序。现在解压缩它&#xff1a;Unpack:$ tar zxf foo2zjs.tar.gz$ cd foo2zjs现在编译并安装它。 INSTALL文件包含更详细的说明; 请现在阅读。Compile:$ makeGet extra files from the web, such as .ICM profiles…

返回指定月份的周列表 包含 周序号、开始日期、结束日期(不包含周末)

/*** 返回当前年月的周列表 包含 周序号、开始日期、结束日期(不包含周末)* param year 年* param month 月* returns {Array} */function getYearMonthWeekList(year,month) {var weekList[];var time year "/" month "/01";//取当前月的第…

tez-site.xml_数字支付系统的未来-Google Tez和音频快速响应

tez-site.xmlby Vaidic Joshi通过Vaidic Joshi 数字支付系统的未来-Google Tez和音频快速响应 (The future of digital payment systems — Google Tez and Audio Quick Response) Google recently marked its entry into the Indian digital payments market by introducing …

Window上安装kafka

kafka在windows上的安装、运行 - 进阶者ryan-su - CSDN博客https://blog.csdn.net/u010283894/article/details/77106159 在Windows环境中安装并使用kafka - 心灵空谷幽兰 - 博客园https://www.cnblogs.com/xinlingyoulan/p/6054361.html?utm_sourceitdadao&utm_mediumref…

数集合有多少个TOJ(2469)

题目链接&#xff1a;http://acm.tju.edu.cn/toj/showp2469.html 感觉这个题目有点问题&#xff0c;算了不管他了&#xff0c;反正A了。 这里要注意的是求这个集合有多少种&#xff0c;那么就是要剔除重复数后&#xff0c;再数一下有多少个。 难一点的算法我也不会&#xff0c;…

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

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

天气城市编码对应地区编码_如何在您的城市中建立强大的编码社区-我是如何做到的...

天气城市编码对应地区编码by Billy Le比利勒(Billy Le) 如何在您的城市中建立强大的编码社区-我是如何做到的 (How you can build a strong coding community in your city — and how I did it) Communities are important. They are the bedrock that glues together shared…

python3 自动打包部署war包

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

python 虚拟环境创建

创建虚拟环境&#xff1a;  sudo apt-get install virtualenv 新建虚拟环境文件夹 venv virtualenv venv 进入虚拟环境 source venv/bin/activate 安装套件列表模块: 用来记录项目中所使用到的各种模块&#xff0c;便于项目部署时统一安装所需模块 pip freeze > requir…

powershell开源新闻及简介

作者&#xff1a;PowerShll传教士 问&#xff1a;微软的PowerShell脚本语言已经开源了 &#xff1f; 答&#xff1a;绝对真的&#xff01;已经&#xff01; 问&#xff1a;源码在哪&#xff1f; 答&#xff1a;微软.net源码网站。 http://referencesource.microsoft.com/ 问&…

linux nginx重新编译安装,Linux系统Nginx编译安装教程

1、下载nginx1.2.4#注&#xff1a;下载地址&#xff1a;http://nginx.org/download/nginx-1.2.4.tar.gzwget -c http://nginx.org/download/nginx-1.2.4.tar.gz2、安装#注&#xff1a;默认安装到/usr/local/nginxtar -zxvf nginx-1.2.4.tar.gzcd nginx-1.2.4./configure如果出现…

htt://3g.hn_根据我对“询问HN:谁在招聘?”的分析,开发人员技能发展趋势

htt://3g.hnby Ryan Williams瑞安威廉姆斯(Ryan Williams) 根据我对“询问HN&#xff1a;谁在招聘&#xff1f;”的分析&#xff0c;开发人员技能发展趋势 (Trending Developer Skills, Based on my Analysis of “Ask HN: Who’s Hiring?”) For people learning to code an…