1.概述:
用于对已经分组的数据进行组内条件筛选以及组内数据计算
2.使用示例:
2.1求众数![在这里插入图片描述](https://img-blog.csdnimg.cn/c86c9bff51b546c58f6fa447cf804a9a.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/384a347cecb04846b6b5c71486f9b686.png#pic_center)
说明:根据收入分组,having count(*)计算分组后各组内条数,>=ALL() 比all()所有条数数据都大
2.2求中位数:
将集合中的元素按照大小分为上半部分和下半部分两个子集,同时让这两个子集共同拥有集合正中
间的元素,这样,共同部分的元素的平均值就是中位数。
2.3查询不包含null的分组:
COUNT函数的使用方法有COUNT(*)和COUNT(列名)两种,它们的区别有两个:第一个是性能上的区别;第二个是COUNT(*)可以用于NULL,而COUNT(列名)与其他聚合函数一样,要先排除掉NULL的行再进行统计。
从下表里找出哪些学院的学生全部都提交了报告(即理学院、经济学院)。如果只是用WHERE sbmt_date IS NOT NULL这样的条件查询,文学院也会被包含进来,结果就不正确了
正确的做法是,以“学院”为GROUP BY的列生成下面这样的子集。
这样生成的4个子集里,我们想要的是S1和S4。那么,这2个子集具备而其他子集不具备的特征是什么呢?答案是“COUNT(*)和COUNT(sbmt_date)结果一致”。这是因为S2和S3这2个子集里存在NULL。
2.4购物篮分析模型:
假设有这样两张表:全国连锁折扣店的商品表Items,以及各个店铺的库存管理表ShopItems。
2.4.1.查询全包含关系的数据(查询包含item所有商品的店铺)
HAVING子句的子查询(SELECT COUNT(item) FROM Items)的返回值是常量3。因此,对商品表和店铺的库存管理表进行连接操作后结果是3行的店铺会被选中。
2.4.2查询全等关系的数据(查询只包含item所有商品的店铺)
说明:未在item表中的数据在左外连接时会是null,利用count(I.item)的排空能力