SQL夯实基础(三):聚合函数详解

一、GROUP BY  Having

聊聚合函数,首先肯定要弄清楚group by 和having 的用法。

SELECT id, COUNT(course) as numcourse, AVG(score) as avgscore

FROM student

GROUP BY id

HAVING AVG(score)>=80;

注意

1、因为聚合函数通过作用于一组数据而只返回一个单个值,因此,在SELECT语句中出现的元素要么为一个聚合函数的输入值,要么为GROUP BY语句的参数,否则会出错。

2、where与having的区别,where是在分组前对结果集进行过滤,而having是对group by分组后的结果集进行过滤。

二、常用聚合函数

1. AVG 返回指定组中的平均值,空值被忽略。

例:select prd_no,avg(qty) from sales group by prd_no

2. COUNT 返回指定组中项目的数量。

例:select count(prd_no) from sales

3. MAX 返回指定数据的最大值。

例:select prd_no,max(qty) from sales group by prd_no

4. MIN 返回指定数据的最小值。

例:select prd_no,min(qty) from sales group by prd_no

5. SUM 返回指定数据的和,只能用于数字列,空值被忽略。

例:select prd_no,sum(qty) from sales group by prd_no

6. COUNT_BIG 返回指定组中的项目数量,与COUNT函数不同的是COUNT_BIG返回bigint值,而COUNT返回的是int值。

例:select count_big(prd_no) from sales

 

另外还有一个mysql里面可以使用的特例:group_concat

将group by产生的同一个分组中的值连接起并且默认用逗号分割。

三、自定义聚合函数

MYSQL中没有办法定义聚集函数。

但是sql server 是可以的。

详情可以参考下面的博文

https://www.cnblogs.com/volts0302/p/5545401.html

由于我工作的时候使用mysql较多,所以对自定义聚合函数的应用并不了解,这里就不多说了。

四、子查询

SQL不仅允许简单的SELECT查询,还允许创建子查询,即嵌套在其他查询中的查询。

以下为实例

select m.id as PolicyId,m.PolicyNo,m.PolicyType,m.PolicyStartTime,m.PolicyEndTime,m.BelogOrganizationName,(select GROUP_CONCAT(b.`Name`) from policy_people as b where  b.PolicyIndexId=m.Id and b.Relation=2 ) as InsuredPeople ,(select count(0) from report where  report.PolicyId=m.Id) as CompenCount from policy_people as p inner join policy_index as m on p.PolicyIndexId=m.id where p.CertificateNo=?certificateNo  and  m.PolicyStartTime>?year
原文地址:https://www.cnblogs.com/qixinbo/p/8457953.html