SQL分组查询GroupBy加having

一.分组查询

概述作用:

“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

1.使用group by进行分组查询
在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:
〉被分组的列
〉为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数
group by的使用在这只写几个例子吧:
例:
select courseID,avg(score) as 课程平均成绩
from score
group by courseID
例:
select studentID as 学员编号,courseID as 内部测试,avg(score) as 内部测试平均成绩
from score
group by studentID,courseID
2.使用having子句进行分组筛选

  • where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。

例:
select studentID as 学员编号,courseID as 内部测试,avg(score) as 内部测试平均成绩
from score
group by studentID,courseID
having avg(score)>60

3.使用注意

select 类别, sum(数量) as 数量之和, 摘要
from A
group by 类别
order by 类别 desc

示例3执行后会提示错误,这就是需要注意的一点,在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。

在select语句中,where、group by、having子句和统计函数的执行次序如下:
where子句从数据源中去掉不符合去搜索条件的数据;group by子句搜集数据行到各个组中,统计函数为各个组计算统计值;having子句去掉不符合其组搜索条件的各组数据行 。

原文地址:https://www.cnblogs.com/oruid/p/12322564.html

时间: 2024-10-14 15:11:28

SQL分组查询GroupBy加having的相关文章

SQL给查询结果加序号

情境:在用delphi7编程时,想要给查询出的结果一个编号,比如有一万条结果,就自动从1编号到10000 显示数据时用的是DBGrid控件,但是它的第一列无法很好的显示编号,找了很多方法都不能如愿 后又选用stringgrid,自己在第一列显示序号,效果达到了,但是却没有DBGrid速度快. 最后采用了显示依然使用DBGrid,在查询后给查询结果编号的方法来实现. 方法:1.DBGrid新增加一个field,field名字为ID,这个字段在你的表中是不存在的. 2.SQL.Add('SELECT

复杂sql分组查询 ( pivot)

一个数据表里面字段有年.月.日.金额.支付方式等字段,然后现在想写个sql语句,把每一天的每种支付方式金额(支付方式有多重)排在同一行, 最后在增加一列小计当前的所有支付方式的金额.如下图: 原sql查询出来的结果是这样的: ------------------------------------------------------------------------------------------- 然后想实现的sql结果最后呈现是这样的: 这可为难了我了,简单的增删改查左右链接sql语句

SQL分组查询

实际应用中,我们经常需要做一些数据统计,将表的全部数据划分为几组数据,每组数据统计出一个结果.这种功能可以使用分组函数(多行函数.集合函数)来实现. 在Mysql数据库中,通过GROUP BY子句将分组的依据加入到查询语句中,并可使用HAVING子句进一步限制查询结果.主要有COUNT/AVG/SUM/MAX/MIN等几个分组函数. COUNT:  COUNT函数用来计算表中的总记录条数. AVG.SUM:AVG.SUM这两个函数用来统计列或表达式的平均值和和值. MAX.MIN:这两个函数用来

SQL分组查询每组前几条数据

/*第一种实现方法,效率低并且有错误*/ DECLARE @DD DATETIME SET @DD = GETDATE() SELECT a.GoodsID , a.Account , a.LastUpdate FROM dbo.tb_App_Goods a LEFT JOIN dbo.tb_App_Goods b ON a.Account = b.Account AND a.LastUpdate > b.LastUpdate GROUP BY a.GoodsID , a.Account , a

sql分组查询partition

select b.STCD,b.STNM,t.EQPTP,t.EXKEY from ST_STBPRP_B b left join ST_GATE_R t on b.STCD = t.STCD where t.TM = (select max(s.tm) as mtm from ST_GATE_R s where s.STCD = b.STCD group by s.STCD) select s.* from ( select t.STCD,b.STNM,t.EQPNO,t.TM,ROW_NUM

sql 分组查询满足条件所以数据

1 select distinct t1.pciBillID, 2 STUFF((SELECT distinct t2.Invoicenumber+ ',' 3 from TB_PCustomerInvoiceextend t2 4 where t1.pciBillID = t2.pciBillID 5 FOR XML PATH(''), TYPE 6 ).value('.', 'NVARCHAR(MAX)') 7 ,1,0,'') data 8 from TB_PCustomerInvoice

Group by 分组查询 实战

实战经历,由于本人在共享单车上班,我们的单车管理模块,可以根据单车号查询单车,但是单车号没有设置unique(独一无二约束),说以这就增加了单车号可能重复的风险,但是一般情况下,单车号是不会重复的,因为平台的单车都是人工录入的,但是二般情况下,就会出现,一旦出现,那么就shit了,很不幸,今天就出现了这个问题,“一个单车号,可以在单车管理模块查出来有两条记录”这个时候,我们就必须把出现这种问题的单车号,再次手动编辑改变,由于数据库里,单车管理表里有成千上万个单车,但是,都有哪一个单车号出现了两次

关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

http://www.jianshu.com/p/eeb6a898d4ec 前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. SQL数据查询 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]- FROM <表名或视图名>[,<表名或视图名>]- [WHERE <条件表达式>] [GROUP BY <列名> [HAVING &l

SQL group by分组查询(转)

本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析.创建分组是通过GROUP BY子句实现的.与WHERE子句不同,GROUP BY子句用于归纳信息类型,以汇总相关数据.GROUP BY的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理. 在SQL Server中使用的分组查询是ORDER BY子句,使用ORDER BY子句要同聚合函数配合使用才能完成分组查询,在SELECT查询的字段中如果字段没有使用