【SQL】分组数据,过滤分组-group by , having

学习笔记,原文来自http://blog.csdn.net/robinjwong/article/details/24845125

创建分组 - GROUP BY

分组是在SELECT语句的GROUP BY子句中建立的。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理SELECT子句中的列名必须为分组列或列函数,列函数对于GROUP BY子句定义的每个组各返回一个结果

一些规定:

 

  • GROUP BY 子句可以包含任意数目的列,这使得能对分组进行嵌套,为数据分组提供更细致的控制;
  • 如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总;
  • GROUP BY子句中列出的每个列都必须是检索列或有效的表达式。如果在SELECT中使用表达式,则必须在GROUP BU子句中指定相同的表达式,不能使用别名;
  • 大多数SQL实现不允许GROUP BU列带有长度可变的数据类型(如文本或备select departmentid, departmentname from basicdepartment group by departmentid;注型字段);
  • 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出
  • 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组;
  • GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前;

过滤分组 - HAVING

除了能用GROUP BY分组数据外,SQL还允许过滤分组,规定包括哪些分组,排除哪些分组。例如,可能想要列出至少有两个订单的所有顾客,为了得出这种数据,必须基于完整的分组而不是个别的行进行过滤。

WHERE过滤行,而HAVING过滤分组HAVING支持所有WHERE操作符,HAVING子句中能使用聚集函数WHERE在数据分组前进行过滤。HAVING在数据分组后进行过滤。WHERE排除的行不包括在分组中

 

 

分组 V.S. 排序 - GROUP BY V.S. ORDER BY

 

 

ORDER BYGROUP BY
排序产生的输出分组行,但输出可能不是分组的顺序
任意列都可以使用只可能使用选择列或表达式列,而且必须使用每个选择列表达式
不一定需要如果与聚集函数一起使用列,则必须使用


千万不要仅依赖GROUP BY排序数据。

 

示例

 

下表:学生号(SNO),课程名(PNO),成绩(GRADE)

1 YY  90
1 SX 98
1 YW 95
2 YY 92
2 SX 91
2 YW 89
3 YY 96
3 SX 88
3 YW 85
4 YY 88
4 SX 89
4 YW 95

1. 显式90分以上学生的课程名和成绩

(不涉及分组计算,数据块是原始表就行

  select * from sc where GRADE >= 90  

2.  显式每个学生的成绩在90分以上的各有多少门

 

(涉及到分组计算,单独计算的数据快为每个学生,数据块整体没有要求(因此没有having),但是提前需要用where过滤)select SNO, count(*) from sc where GRADE >= 90 group by SNO  

3.  至少有两门课程在90分以上的学生号及90分以上的课程数 (过滤分组)

(涉及到分组计算,同时数据库也有要求)

select SNO, count(*) from sc where GRADE >= 90 group by SNO having count(*) >= 2  

4.  选出平均成绩大于90分,且语文必须在95以上的学生

 

(涉及到分组计算,且之前有过滤)

 

select SNO, avg(GRADE) 

from sc 

where SNO in (select SNO from sc where PNO = 'YW' and GRADE >= 95) 

group by SNO 

having avg(GRADE) >= 90  

 

 

转载于:https://www.cnblogs.com/coskaka/p/7193360.html

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

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

相关文章

使用EasyMock或Mockito

我大部分时间都在使用EasyMock ,但是最近我和一些非常愿意使用Mockito的人一起工作。 我不打算在同一项目中使用两个框架来实现相同的目的,因此我采用了Mockito 。 因此,在过去的几个月中,我一直在使用Mockito ,这是我…

CentOS下iptables 配置详解

如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置 我们来配置一个filter表的防火墙. (1)查看本机关于IPTABLES的设置情况 [roottp ~]# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destination Chain FORWARD (policy…

java lambda 多个参数_Java Lambda行为参数化

Java Lambda行为参数化我们可以将lambda表达式作为参数传递给方法。例子以下代码创建了一个名为Calculator的函数接口。在Calculator中有一个称为calculate的方法,它接受两个int参数并返回一个int值。在Main类中有一个引擎方法,它接受函数接口Calculator…

具有关联映射的Hibernate Composite ID

最近,我们面临着带有复合id字段的休眠关联映射的棘手情况。 我们需要与一对一和多对一建立双向关联。我们的拖曳表是“ REPORT”和“ REPORT_SUMMARY”,它们之间具有从REPORT到REPORT_SUMMARY的一对多关系,而从REPORT_SUMMARY到REPORT表。 RE…

ZooKeeper应用场景

ZooKeeper是一个高可用的分布式数据管理与系统协调框架。基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得ZooKeeper解决很多分布式问题。网上对ZK的应用场景也有不少介绍,本文将结合作…

java main test_java调用main自动执行testng方法一

主方法import com.com.utlis.createTestngXml;import org.testng.TestNG;import java.util.ArrayList;import java.util.List;/*** author lw* createTime 2019/3/30 15:35* description testng调试类*/public class inittet {private static final String ESCAPE_PROPERTY &q…

有趣的Ruby-学习笔记3

Ruby方法方法名要以小写字母开头。假设用大写字母开头会被作为常量 (这点非常奇怪)定义一个无參的方法def method_name expr.. end定义一个有參的方法def method_name (var1, var2)expr.. end给參数设定默认值def method_name (var1value1, var2value2)e…

ADF:动态视图对象

今天,我想写有关动态视图对象的文章,它允许我在运行时更改其数据源(SQL查询)和属性。 我将使用oracle.jbo.ApplicationModule :: createViewObjectFromQueryStmt方法来解决此问题。 我将逐步介绍如何执行此操作 创建视图对象和应…

java stack list_JAVA自己实现List接口Stack

package 集合.Stack;import java.util.Arrays;import java.util.EmptyStackException;import java.util.Vector;public class MyStack {//底层数组默认长度为10private Object[] myStack new Object[10];//sizeprivate int size 0;public MyStack() {}//pushpublic Object pu…

刷题总结——序列操作(权值线段树套树状数组)

题目: 题目描述 给出序列 a1,a2,…,an(0≤ai≤109),有关序列的两种操作。 1. ai(1≤i≤n)变成 x(0≤x≤109)。 2. 求 al,al1&#xff…

原型模式Prototype

原型模式 http://www.cnblogs.com/zhili/p/PrototypePattern.html ICloneable接口 https://msdn.microsoft.com/en-us/library/system.icloneable(vvs.110).aspx Supports cloning, which creates a new instance of a class with the same value as an existing instance. Rem…

I / O神秘化

由于对高度可扩展的服务器设计的所有炒作以及对nodejs的狂热,我一直想重点研究IO设计模式,直到现在为止都没有足够的时间进行投资。 现在已经做了一些研究,我认为最好记下我遇到的东西,作为对我以及可能遇到这篇文章的任何人的未来…

java三大特性 继承_java基础(二)-----java的三大特性之继承

在《Think in java》中有这样一句话:复用代码是Java众多引人注目的功能之一。但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情。在这句话中最引人注目的是“复用代码”,尽可能的复用代码使我们程…

Maven本地仓库配置

本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有…

配置CDI对话的超时

在开发JSF应用程序时,CDI对话范围是一个很好的功能。 假设您有大型数据表,需要花费很长时间才能加载。 由于高内存消耗,您通常不希望将加载的数据放在会话范围的Bean中。 而且,您不能将加载的数据放入视图范围的Bean中&#xff0c…

记录下log4j的两种配置方式

XML文件配置 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4jhttp://jakarta.apache.org/log4j/><!-- 输出到控制台 --><appender na…

java字符串与数组比较大小_java-如何将存储在数组中的字符串与简单字符串进行比较?...

我想比较数组中字符串形式的学生人数与人数n这是字符串。remarque&#xff1a;班级形成&#xff1a;私有字符串代码&#xff1b;私有字符串名称&#xff1b;private int nbsi 0;私人学生[]标签新学生[200]&#xff1b;班级学生&#xff1a;私有字符串号&#xff1b;私有字符串…

delphi用TAdoStoredProc调用存储过程,兼容sql2005、2008、2014的远程事务问题

delphi7写的程序&#xff0c;在sql2000里没问题&#xff0c;调用sql2008、2014里的存储过程时&#xff0c;如果存储过程里操作了大量数据&#xff0c;很容易会莫名其妙的自己撤销掉&#xff0c;但是程序还识别不到&#xff0c;认为还在正常执行。今天尝试换了个控件&#xff1a…

使用NoSQL实现实体服务–第3部分:CouchDB

在本系列的第2部分中 &#xff0c;我使用SOA的“合同优先”技术创建和部署了产品实体服务&#xff0c;现在&#xff0c;我将致力于服务实现的NoSQL数据库方面。 正如我在第1部分中已经提到的那样&#xff0c;我已经选择CouchDB作为我的NoSQL数据库&#xff0c;选择Ektorp库作为…

8、SpringCloud高频面试题-版本1

1、SpringCloud组件有哪些 SpringCloud 是一系列框架的有序集合。它利用 SpringBoot 的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等&#xff0c;都可以用 SpringBoot 的开发风格做到一键启…