HAVING的高级使用

1.概述:

 用于对已经分组的数据进行组内条件筛选以及组内数据计算 

2.使用示例:

2.1求众数在这里插入图片描述在这里插入图片描述

说明:根据收入分组,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)的排空能力

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值