SQL分组查询

 实际应用中,我们经常需要做一些数据统计,将表的全部数据划分为几组数据,每组数据统计出一个结果。这种功能可以使用分组函数(多行函数、集合函数)来实现。

在Mysql数据库中,通过GROUP BY子句将分组的依据加入到查询语句中,并可使用HAVING子句进一步限制查询结果。主要有COUNT/AVG/SUM/MAX/MIN等几个分组函数。

COUNT:  COUNT函数用来计算表中的总记录条数。

AVG、SUM:AVG、SUM这两个函数用来统计列或表达式的平均值和和值。

MAX、MIN:这两个函数用来获取列或表达式的最大值、最小值,可以用来统计任何数据类型。

要把数据表划分为一个一个小组,需要使用GROUP BY子句,把需要进行分组的列放在这个子句后面,如果需要进一步限制分组后的结果,需要使用HAVING子句。使用语法如下

SELECT <*,column [alias],...> FROM table

[WHERE condition(s)]

[GROUP BY group_by_expression]

[HAVING group_condition ]

[ORDER BY column[ASC|DESC]];

单列分组: 即分组的依据是一个列

多列分组:即分组的依据是多个列

  SELECT email,desiredState,max( createTime) ss from ali_edas_app GROUP BY email,desiredState;

使用HAVING子句用来对分组后的结果进一步限制。如将平均薪水不小于3000才被显示出来:

注意:

  • AVG、SUM这两个函数只能用来操作数字。
  • MAX、MIN、AVG、SUM等函数在计算时会自动忽略NULL值。
  • 分组函数只能出现在SELECT列表、HAVING子句和ORDER BY子句中,不能出现在WHERE子句中。
  • 如果要限制分组结果,只能使用HAVING子句。
  • 使用分组函数时,出现在SELECT列表中的字段,如果只有组函数的字段,那么可以没有GROUP BY子句,如果还有其他的列或者表达式,则这些列和表达式必须出现在GROUP BY子句中(重要  group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面)
  • 出现在GROUP BY 子句中的列,没有出现在SELECT列表中,语法上是可以的。
时间: 2024-10-12 17:50:08

SQL分组查询的相关文章

SQL分组查询GroupBy加having

一.分组查询 概述作用: “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理. 1.使用group by进行分组查询在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:〉被分组的列〉为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数group by的使用在这只写几个例子吧:例:select courseID,a

复杂sql分组查询 ( pivot)

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

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 Server 基础 04 函数与分组查询数据

函数与分组查询数据 系统函数分 聚合函数.数据类型转换函数.日期函数.数学函数 . . . 1. 聚合函数 主要是对一组值进行计算,然后返回一个值. 聚合函数包括 sum(求和).avg(求平均值).min().max().count(求数量) sum函数语法  :  sum(列明) select sum(sno) as 序号和 from stu_info avg select avg(sno) as 序号平均值 from stu_info . . . count 用来一组值的个数,统计 sel

sql server——分组查询(方法和思想)

思想 先排序在汇总 sql server里分组查询通常用于配合聚合函数,达到分类汇总统计的信息.而其分类汇总的本质实际上就是先将信息排序,排序后相同类别的信息会聚在一起,然后通过需求进行统计计算. 使用GROUP BY进行分组查询 实例演示 --查询男女生的人数 在没有学习分组查询之前,我们可以安装常规的思路解决查询需求: select count(*) from student where sex='男' select count(*) from student where sex='女' 那

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

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