首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SQL进阶-11-having子句

SQL进阶-11-having子句

作者头像
皮大大
发布于 2021-03-01 05:29:35
发布于 2021-03-01 05:29:35
77500
代码可运行
举报
运行总次数:0
代码可运行

SQL进阶-11-having子句

HAVING子句是SQL中非常重要的功能,本文将再次介绍该子句的使用。作者指出:SQL语句处理的对象是集合而不是记录,我们要有面向集合的思考方式

队伍点名

需求

从下面的表格中找出:所有队员都是待命状态的队伍

SQL实现
全称量化实现

所有的队员都是待命,这是一个全称量化的命题,我们使用not exist来表达

都是待命状态等价于没有不是待命状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 1、全称量化实现

select
	team_id
	,member
from Team t1
where not exists(select *    -- 不存在不是待命的人  也就是全部是待命
                 from Team t2
                 where t1.team_id = t2.team_id
                 and status <> '待命'
                );
having-1-实现

下面我们使用having语句来实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select
	team_id
from Team
group by team_id
having count(*) = sum(case when status = '待命' -- 待命为1,求出所有为1的和,等于行记录,则说明全部是待命的状态
                      then 1
                      else 0 end)

自己想到的方法也和下面的特征标记方法类似:

having-2-实现
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select
	team_id
from Team
group by team_id
having max(status) = '待命'
and min(status) = '待命';   -- 最大值和最小值一样,说明只存在一种状态

将条件放在select子句中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select
	team_id
	,case when max(status) = '待命' and min(status) = '待命'
		then '全部待命' else '人手不够'
		end as status
from Team
group by team_id;

单重集合和多重集合

需求

从下面的原材料表中找出重复的产地及材料

  • 锌重复的东京
  • 钛钢重复的名古屋
SQL实现
having实现

满足需求城市的特点:排除重复元素前后的个数不同!!!

如果不存在重复元素,不管是否加上distinct可选项,count的结果是相同的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select center  -- 查出存在重复的地方
from City
group by center
having count(material) <> count(distinct material);  -- 去重前后个数不同,说明存在重复的记录
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select
	center
	,case when count(material) <> count(distinct material) then '存在重复复'
	else '不存在重复' end as status
from City
group by center;
exists实现

使用exists性能会变好写;如果想查出不存在重复材料的生产地,改成not exists即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select center, material
from Material m1
where exists (select * from Material m2
              where m1.center = m2.center
              and m1.receive_date <> m2.receive_date
              and m1.material = m2.material
             );

缺失编号问题

查找一条序列是否存在缺失的编号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select '存在缺失编号' as gap
from Seqtable
having count(*) <> max(seq) - min(seq) + 1;  -- 行记录和最值的差+1不等,说明存在重复行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 表为空也返回记录

select
	case when count(*) = 0 then '表为空'
			when count(*) <> max(seq) - min(seq) + 1 then '存在缺失编号'
	else '连续' end as gap
from Seqtable;

查找最小的缺失值编号的SQL语句,去掉起始值是1的限制:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select
	case when count(*) = 0 or min(seq) > 1 then 1   -- 空表或者最小值大于1,则返回1
	else (select min(seq + 1)
        from Seqtale s1
        where not exists (select * from Setable s2  -- not  exists能够处理NULL的情况,not in不能
                 where s2.seq = s1.seq + 1)) end
from Seqtable;

学生成绩查询

查询75%以上的学生分数都在80分以上的班级
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select class
from Test
group by class
having count(*) * 0.75 <= sum(case when score >= 80   -- 大于80分的人数
                              then 1 else 0 end
                             );
分数在50分以上的男生人数比分数在50分以上的女生的人数多的班级
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select class
from Test
group by class
having sum(case when score >= 50 and sex='男' then 1 else 0 end) >   -- 两个条件指定之后求和
			sum(case when score >= 50 and sex='女' then 1 else 0 end);
女生平均分比男生平均分高的班级
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select class
from Test
group by class
having avg(case when sex='男' then score else NULL end) <   -- 男生的平均分;空集返回NULL
			avg(case when sex='女' then score else NULL end);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
利用散点图探索帕尔默企鹅数据
参考:Scatterplot with labels and text repel in Matplotlib[1]
HsuHeinrich
2025/04/29
840
利用散点图探索帕尔默企鹅数据
Matplotlib 1.4W+字基础教程来了(收藏吃灰去吧~~)
参考:Rougier N P, Droettboom M, Bourne P E, et al. Ten Simple Rules for Better Figures[J]. PLOS Computational Biology【IF 4.7】, 2014, 10(9).感兴趣戳:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4161295/pdf/pcbi.1003833.pdf
DataCharm
2021/02/22
1.6K0
Matplotlib 1.4W+字基础教程来了(收藏吃灰去吧~~)
python数据可视化之画箱形图
最近接到锅让画几个数据图。其实第一反应是用origin来画图,但问了一圈周围没有用Origin画过箱形图的,有些问题无法解决又百度不到。但好在略懂一点python的matplotlib画图,于是决定换个更适合程序员的画图工具。
我爱自然语言处理
2018/05/21
6.4K2
python数据可视化之画箱形图
分布(四)利用python绘制小提琴图
小提琴图主要用于显示数据分布及其概率密度。中间的黑色粗条表示四分位数范围,从其延伸的幼细黑线代表 95% 置信区间(以外则为异常点),而白点则为中位数。小提琴图结合了箱线图和密度图的优点,既可以了解数据统计信息,也可以了解数据分布特点。
HsuHeinrich
2024/03/06
6770
分布(四)利用python绘制小提琴图
Python-matplotlib 商业图表绘制03
本篇推文为python-matplotlib 商业图表绘制的第三篇文章,主要内容为圆润柱状图的绘制,这也是我之前一直想做的事情,在浏览Matplotlib官网时,发现了一个方法,就试着进行绘制,效果还不错。接下来,我们开始
DataCharm
2021/02/22
6280
Python-matplotlib 商业图表绘制03
matplotlib 小提琴图(violin plot)
这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。中间白点为中位数,中间的黑色粗条表示四分位数范围。上下贯穿小提琴图的黑线代表最小非异常值min到最大非异常值max的区间,线上下端分别代表上限和下限,超出此范围为异常数据。(或者,从黑色粗条延伸的细黑线代表 95% 置信区间)
用户6021899
2019/08/14
13.7K0
(在模仿中精进数据可视化04)旧金山街道树木分布可视化
  开门见山,今天我们要模仿的数据可视化作品来自#TidyTuesday活动于2020年1月28日发布的旧金山街道树木数据集下的众多参赛作品中,由Philippe Massicotte创作的(如图1所示)非常受欢迎的Street trees of San Francisco:
Feffery
2020/11/24
6600
(在模仿中精进数据可视化04)旧金山街道树木分布可视化
Matpotlib绘图遇到时间刻度就犯难?现在,一次性告诉你四种方法
最近有小伙伴私信我关于matplotlib时间类型刻度的设置问题,第一感觉就是官网有好多例子介绍啊
数据森麟
2020/09/24
3K0
Matpotlib绘图遇到时间刻度就犯难?现在,一次性告诉你四种方法
Python-matplotlib 横向堆积柱状图绘制
,经群里爱学习的小伙伴们提醒,居然漏了一个常用的柱状图形式。看吧····知识点还是没有系统起来(最近也在对各种图表进行系统规整哦,包括学术和商业的
DataCharm
2021/02/22
6.7K1
Python-matplotlib 横向堆积柱状图绘制
数据分析最有用的Top 50 Matplotlib图(带有完整的Python代码)(下)
昨天我们跟大家分享了50个Matplotlib可视化 - 主图(带有完整的Python代码)上 ,详情链接请戳:50个Matplotlib可视化 - 主图(带有完整的Python代码)上
Datawhale
2019/10/18
2.2K0
数据分析最有用的Top 50 Matplotlib图(带有完整的Python代码)(下)
一行代码简单搞定matplotlib柱状图显示数据标签
在用matplotlib绘制柱状图的时候,往往需要将数据显示在柱状图上,今天我们就简单介绍一下。
可以叫我才哥
2021/08/05
16.8K0
(在模仿中精进数据可视化05)疫情期间市值增长top25公司
  新冠疫情对很多实体经济带来冲击的同时,也给很多公司带来了新的增长点。前段时间我看到图1所示的数据可视化作品,针对2020年1月1日到6月16日之间,世界范围内市值增大最多的25家公司进行可视化:
Feffery
2020/12/01
3540
(在模仿中精进数据可视化05)疫情期间市值增长top25公司
python学习之matplot
import matplotlib.pyplot as plt import numpy as np import pandas as pd from mpl_toolkits.mplot3d import Axes3D import matplotlib.gridspec as gridspec from matplotlib import animation
py3study
2020/01/08
8240
数据可视化:疫情期间市值增长top25公司
今年肆虐全球的新冠疫情给世界各国经济都造成了相当大的影响,尤其对很多实体经济带来巨大冲击。不过,这期间也有不少公司保持了较高的增长。前段时间我看到一张数据图表(图1),针对2020年1月1日到6月16日之间,世界范围内市值增大最多的25家公司进行可视化:
Crossin先生
2020/12/22
4650
数据可视化:疫情期间市值增长top25公司
Python-matplotlib 学术柱状图绘制
柱状图或条形图在学术论文中使用的频率还是很大的,图中需要以不同颜色对不同数据进行区分,但当涉及黑白打印时,色彩颜色的区别度较小,导致难以理解,因此需要绘制黑灰颜色或者黑白阴影的柱状图或者条形图,下面就具体介绍使用Python-matplotlib 的实现过程。
气象学家
2020/07/17
4.9K0
Python-matplotlib 学术柱状图绘制
Python-matplotlib 绘图配色设计
色彩搭配对图表的第一印象至关重要,合理的设置对图表的颜值提升有着很大的帮助,本期推文结合一个具体例子对图表颜色搭配进行讲解。
DataCharm
2021/02/22
1.5K0
Python-matplotlib 绘图配色设计
数据可视化 | seaborn绘制散点图
由于涉及的图表类型为多类别散点图的绘制,在使用常规matplotlib进行绘制时会显得格外繁琐,所以我们选择了对matplotlib进行了更高级的API封装,使作图更加容易的seaborn包进行图表的绘制,更多seaborn 介绍,大家可以直接去seaborn官网进行相关资料的查阅。数据的读取使用的功能强大的数据处理包 pandas ,这里只是进行简单的删除空值操作,直接使用dropna() 函数操作即可,我们直接预览数据,如下(部分):
郭好奇同学
2020/11/25
2K0
数据可视化 | seaborn绘制散点图
Python-seaborn 基础图表绘制-散点图
上期推文推出第一篇基础图表绘制-R-ggplot2 基础图表绘制-散点图 的绘制推文,得到了很多小伙伴的喜欢,也是我更加想使这个系列做的更加完善和系统,我之前也有说过,会推出Python和R的两个版本绘制教程,接下来我们就推出基础散点图的Python绘制版本。本期主要涉及的知识点如下:
数据森麟
2020/11/23
1.7K0
Python-seaborn 基础图表绘制-散点图
Python数据分析--折线图
最近阅读学习了林骥老师的《数据化分析 Python 实战》,书中讲好的技能应该刻意的练习,而不是简单的重复。
MiaoGIS
2022/04/21
1.4K0
Python数据分析--折线图
matplotlib画图中的各种设置
原文出处:https://www.jianshu.com/p/8006d74ac9e7
SL_World
2021/09/18
3K0
推荐阅读
相关推荐
利用散点图探索帕尔默企鹅数据
更多 >
目录
  • SQL进阶-11-having子句
  • 队伍点名
    • 需求
    • SQL实现
      • 全称量化实现
      • having-1-实现
      • having-2-实现
  • 单重集合和多重集合
    • 需求
    • SQL实现
      • having实现
      • exists实现
  • 缺失编号问题
  • 学生成绩查询
    • 查询75%以上的学生分数都在80分以上的班级
    • 分数在50分以上的男生人数比分数在50分以上的女生的人数多的班级
    • 女生平均分比男生平均分高的班级
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档