[Mysql 必知必会]_汇总分组子查询

本文深入探讨了SQL中的聚合函数如COUNT、SUM、AVG、MAX和MIN的使用,以及如何通过GROUP BY子句对数据进行分组,利用HAVING子句进行分组过滤。同时,介绍了子查询的应用,包括其在WHERE子句中的使用和作为计算字段的方法。

12.1..1 avg  函数

Avg :

 

12.2.2 count 函数

Count 函数进行解散,额可以李育馆的Count() 确定表中的行的数据

活符合条件的行的数目。

 Count  函数有2中使用的方式:

  1. Q`11 count(*)对表中的行的书迷进行计算, 不管表中的是空值还是非空值。
  2. 对特定列的具有数值的行进行统计,忽略NULL数值。

Eg:

返回cusomter 表中的客户的总数值:

 

下面电子邮件的函数进行即说:

12.1.3 MAX函数

Max 函数返回列中的最大数值,max要求制定对应的列名称,如下图所示:

Ma x函数忽略列的数值为null 的行的。

12.1.4 min函数

Min的函数和max 函数的功能相反,他返回制定列的最小的数值,与Max的数值一样,min需要制定对应的列名称。

如下图所示:

 

12.1.5  sum函数;

返回制定列数值的和和总计;

下面举一个例子,orderitems中包含实际的铲平,每个物品都有响应的数量,可如下检索订购物品的总数,

返回所有的物品数量只和,where 子句之包成是统计某个 物品订单的中的物品。

Sum 也可以用来合计计算数值,在下面的例子中,合计每项物品的item_price*quantit,得出的总的订单金额。

 

下面的例子中使用avg 函数返沪特定的供应商的平均价格,与上面的select 语句相同,但是是用了distinct 参数,因此平均的数值只考虑不同的价格。

 

组合聚集函数:

使用单挑select 语句

 

执行4个函数的数值返回对应的products物品的数目,产品价格的最高,最低以及平均水平的数值。

小结:

聚集函数用来汇总数据的,Mysql 支持一系列的聚集函数,可以使用不通的结果返回返回所需的结果,这些函数是高效的,他们的返回结果要比你自己在客户机上应用程序计算要快得多。

 

 

分组数据:

13.1 数据分组

到目前位置的所有的近似uanzai都是在表的所有的数据活匹配的特定的

Where 子句完成的,提示一下,下面的例子返回供应上的1003 提供的产品数目。

分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算。

 

13.2  创建分组;

在具体使用Group by子句前,需要知道一些重要的规定。

Group by 子句可以包含任意数目的列,这是能对分组进行签到,为数据分组提供更细致的控制。

 

如果在group by 子句中嵌套了分组,数据将在。

如果分组列中具有NULL数值,则NULL将作为一个分组返回,如果有多个NULL数值,

她们将分为一组。

Group BY 子句必须能出现先在where 子句以后,order by子句之前。

 

13.3 过滤分组

  除了能用GROUP分组数字局外,Mysql 还允许过滤分组,规定包含那些分组,排除那些分组,例如,可能想到列出只有有2个订单的所有客户。

为得出这些数据,必须基于完整的分组而不是个别的行进行过滤。

 我们已经看到where 子句的作用,但是在这个例子中,where 子句不是起作用的,因为where子句过滤的是行,而不是分组,事实上,where子句没有分组这个概念。

那么不使用where子句那是用什么呢?Mysql 提供了另外的子句,那就是having 子句,having 非常类似于where,事实上,目前所学的过的所有类型的where子句都可以使用having子句来使用,唯一的区别是,where 过滤行,但是having过滤分组。

 Having支持所有的where子句,

分析:

      分组大于2,过滤订单count(*)>=2 两个以上的订单的那些分组。

 

还有一种理解方法:where 子句在分组前过滤,having子句在分组后过滤。

 

分析:

在这条语句中,第一行是使用聚集函数的基本的select ,他与前面的例子很想,where子句过滤所有prod_price 方法至少为10的行。然后按照vend_id 进行分组,having 子句过滤即说2或2以上的分组,

13.4 分组和排序

虽然Group by 和order  by 经常完成相同的工作,但她们是不通的。表汇总了她们之间的区别。

Order by 和 group by.

Order by

Group by

排序产生的输出

分组行,但是输出可能不是分组的顺组

 

至可能寻则列或表达式列,而且必须使用每个选择表达式

 

表中的第一项差别几位重要,我们进场发现使用GROUP by 分组的数据分组的形式输出的,但是情况并不总是这样的,他并不是SQL规范要求这养的,此外,用户也可能会要求不同于分组的数序排序,仅仅因为一某种的分组数据,并不表示你需要按照相同的方式排除输出。 应该提供明确的order  by 子句,即使效果的等同与group by 子句也是如此,

不要忘记的Group by ,一般在使用的Group by 子句中的也应该使用order by 子句,这是保证数据正确的排序的唯一方法,不要依赖group by 子句。

为说明Group by 和order by 的使用方法,请看一个例子,下面的select 语句类似于前面的例子,他检索与总计价格大于活等于50的订但单的好和总结和总计订单价格。

为按照总计单价价格排序输出,需要添加order by 子句,如下所示。

 

分析:

 在这个inadequa子中,group by 子句用来订单号order_num列分组数据,以列出数据便sum(*)函数能够返回总计订单价格,havinvg子句过滤数据,使得至总计订单价格大于活等于50 的订单。最后用orderby 子句排序输出。

13.5  select 子句顺序

下面会与一下select 语句中子句的数序,理出起劲为止所学过的子句。

子句    说明     是否必须使用

Select  要返沪的列或表达式  是

From   从中检索数据的表 仅仅在从表数据选择中使用

Where  行级过滤

Group by 分组说明

Having  组级别过滤

Order by 输出数序

Limit 要检索的行数。

 

13.6  小结

在第12长中,我们学会使用了用SQL聚集的对数据进行会从,本章讲授了

如何使用group bu 子句对数据进行汇总这些计算,返回每个组的结果,

Having 组级别过滤。

 

14.使用子查询

   迄今我们看到的都是单表查询, SQ还可以进行子查询。

  列出订购物品的所有客户,应该怎么样检索呢?

  1. 检索包含物品TNT的所有订单的编号,
  2. 检索具有前一个步骤的列出的订单的编号的所有客户偶的ID
  3. 检索前一步返回的所有客户ID的客户信息。

虽然子查询一般与IN操作符结合使用,但是也可以使用到=等于 或不等于的方法。S

使用子查询的另一个方法是创建计算字段,加入需要          显示customers中表中

每个客户的订单总数,订单与响应的客户ID存储在orders表中。

为了执行这个操作:遵循下面的步骤:

  1. 从customters表中检索客户列表
  2. 对于检索的出的每个客户,统计在orders表中的的行进行统计。

这种子查询成为相关子查询。任何时候只要列明可能有多一性,就必须使用这种语法,

表明和和列明有一个句点分割。

14.4  小结

本章学习了什么是子查询以及如何使用他们呢,子查询最常见的使用是在where 子句中的IN操作符中,以及用来填充计算列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迅捷的软件产品制作专家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值